Pactman Developer Resources · Nonprofit verification answers for developers and compliance teams
Home  /  Artifacts  /  How to Interpret IRS BMF Data for a Nonprofit
Artifact · Developer How-To

How to Interpret IRS BMF Data for a Nonprofit

Interpret Pactman BMF data in layers. Use `bmf_status` for Business Master File presence, `bmf_ein` and `bmf_organization_name` for source identity, `bmf_subsection` and `subsection_description` for tax-exempt subsection context, and the foundation fields for public-charity or private-foundation classification. Review `exempt_status_code`, ruling and group-exemption fields, `most_recent_bmf`, and separate Pub. 78, revocation and conflict signals before applying your application's final rule.

Updated September 28, 20266 min readFor developers, compliance teams, donation platforms & fintech and nonprofit software teams

Direct answer

Interpret IRS Business Master File data as a set of separate signals rather than as one status field.

Start with bmf_status to determine whether the organization appears in the BMF data used by Pactman. Confirm the source record with bmf_ein and bmf_organization_name, interpret bmf_subsection with subsection_description, then review exemption, foundation, ruling and group-exemption fields. Use most_recent_bmf for freshness, and keep Pub. 78, revocation and BMF/Pub. 78 conflict signals separate when your workflow needs a broader nonprofit-status decision.

  1. Normalize the EIN. Remove spaces or dashes so 12-3456789 becomes 123456789.
  2. Send the EIN to the Nonprofit Check Plus API. Use the single-EIN endpoint for one nonprofit or the bulk endpoint for multiple EINs.
  3. Confirm BMF presence. Evaluate bmf_status.
  4. Confirm the source identity. Review bmf_ein and bmf_organization_name.
  5. Interpret the tax-exempt subsection. Read bmf_subsection together with subsection_description.
  6. Interpret exemption and foundation classification. Review exempt_status_code, foundation_code, foundation_code_description, foundation_509a_status, foundation_type_code and foundation_type_description.
  7. Review determination and group context. Use ruling_month, ruling_year and group_exemption when those fields matter to the workflow.
  8. Check BMF freshness. Review most_recent_bmf and organization_info_last_modified.
  9. Handle religious-organization exceptions. Review bmf_church_message when populated instead of treating ordinary BMF absence as automatically conclusive.
  10. Keep other sources separate. Review pub78_verified, revocation fields, most_recent_pub78 and irs_bmf_pub78_conflict only when the application needs information beyond the BMF itself.

Example request(s)

curl --request GET \
  --url https://entities.pactman.org/api/entities/nonprofitcheck/v1/us/ein/YOUR_EIN \
  --header 'Authorization: Bearer YOUR_API_KEY'

Implementation note: The endpoint name above reflects the Pactman single-EIN Nonprofit Check endpoint used in Pactman's Production/Customer Environment.

curl --request POST \
  --url https://entities.pactman.org/api/entities/nonprofitcheckbulk/v1/us/eins \
  --header 'accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '[
    "YOUR_EIN_1",
    "YOUR_EIN_2",
    "YOUR_EIN_3",
    "YOUR_EIN_4",
    "YOUR_EIN_5"
  ]'

Implementation note: The endpoint name above reflects the Pactman bulk-EIN Nonprofit Check endpoint used in Pactman's Production/Customer Environment. You can have at most 50 EINs in a bulk-EIN Nonprofit Check endpoint request.

What your application should evaluate

Signal Why it matters Typical application decision
bmf_status Indicates whether the organization appears in the Business Master File data used by Pactman. Use as the BMF-presence signal, not as a universal nonprofit-verification result.
bmf_ein / bmf_organization_name Preserves the EIN and organization name as represented in BMF data. Confirm the source record corresponds to the nonprofit being evaluated.
bmf_subsection / subsection_description Provides the BMF subsection code and its corresponding classification description. Use together to interpret the organization's tax-exempt subsection.
exempt_status_code Defines the type of exemption held by the organization in the mapped IRS data. Preserve as a separate exemption-status attribute rather than inferring it from another field.
foundation_code / foundation_code_description Provides the IRS foundation code and its textual description. Use to interpret organization-type and foundation context.
Foundation classification foundation_509a_status, foundation_type_code and foundation_type_description provide additional public-charity/private-foundation context. Keep foundation classification separate from the BMF subsection field.
ruling_month / ruling_year Provides the month and year associated with the ruling or determination letter acknowledging exempt status. Retain as determination-history or audit context.
group_exemption Provides the IRS number associated with a parent organization's group exemption when applicable. Preserve group-exemption context for parent or subordinate organization workflows.
most_recent_bmf Gives the date of the most recent IRS Business Master File used by Pactman. Use as the primary BMF freshness input.
bmf_church_message Can explain why a church or religious organization may not follow ordinary BMF-presence expectations. Route the record through religious-organization exception logic when the field is populated.
Separate IRS signals pub78_verified, revocation fields and irs_bmf_pub78_conflict answer questions outside simple BMF interpretation. Evaluate them separately when the workflow requires contribution, revocation or cross-source decisions.

Example decision logic

A practical BMF interpretation layer might:

  • confirm bmf_status before treating BMF-specific fields as the source record;
  • verify bmf_ein and bmf_organization_name against the intended nonprofit;
  • map bmf_subsection to subsection_description;
  • retain exempt_status_code as its own exemption-status attribute;
  • interpret foundation fields separately from subsection fields;
  • retain ruling and group-exemption values when relevant; and
  • consider most_recent_bmf before treating the BMF record as current enough for the workflow.

The supplied bulk sample illustrates why these dimensions should remain separate. EIN "680343125" returns bmf_subsection: "03" and subsection_description: "501(c)(3) Public Charity", with foundation_type_code: "pc" and foundation_type_description: "Public charity described in section 509(a)(1) or (2)". EIN "996103790" also returns bmf_subsection: "03" and subsection_description: "501(c)(3) Public Charity", while its foundation_type_code is "pf" and its foundation_type_description is "Private non-operating foundation (section 509(a))".

Important: Do not collapse subsection, exemption status and foundation classification into one application field. The current Pactman response exposes them separately, so downstream rules should preserve those distinctions.

Why use a consolidated nonprofit verification API?

Raw BMF data becomes more useful when an application can receive its major identity, subsection, exemption, foundation, ruling, group and freshness attributes in a normalized record instead of building a separate ingestion and interpretation pipeline.

Pactman Nonprofit Check Plus returns those BMF attributes alongside Pub. 78, revocation and other verification signals. The supplied single-EIN and bulk examples use the same current 43 organization-level fields, so the same BMF interpretation logic can be reused for interactive checks and batch workflows.

One normalized response

Interpret BMF presence, identity, subsection, exemption status, foundation classification, ruling information and group context from one Pactman organization record.

Separate source signals

Keep BMF attributes distinct from pub78_verified, revocation fields and irs_bmf_pub78_conflict so your application does not lose source meaning.

Reusable compliance rules

Create one BMF interpretation layer that can support onboarding, donation processing, grantmaking, fintech, donor-advised fund and recurring-review workflows.

Developer-friendly automation

Convert the returned BMF fields into structured application attributes and rules instead of requiring a person to manually inspect IRS records for each EIN.

Frequently asked questions

What is the difference between bmf_status and bmf_subsection?

bmf_status tells you whether the organization appears in the BMF data used by Pactman. bmf_subsection identifies the subsection code associated with that BMF record. Use subsection_description to retain the mapped description of that code.

Should I use bmf_subsection to determine public-charity or private-foundation status?

Do not use it as the only foundation-classification field. Pactman also returns foundation_code, foundation_code_description, foundation_509a_status, foundation_type_code and foundation_type_description, which should remain separate in your interpretation logic.

What does most_recent_bmf tell me?

It is the date of the most recent IRS Business Master File represented in the Pactman response. Use it as a freshness signal when deciding whether the BMF data is current enough for your workflow.

What if the organization is missing from the BMF?

Review bmf_church_message when populated and evaluate any other source signals required by the workflow. The supplied mapping specifically provides this message for church or religious-organization cases where ordinary BMF presence may not be required to validate status.

Next step

Map the Pactman BMF fields into separate application attributes for presence, identity, subsection, exemption status, foundation classification, ruling, group context and freshness, then apply Pub. 78, revocation and conflict logic only when the broader workflow requires those additional sources.

Ready to automate BMF interpretation?

Use Pactman Nonprofit Check Plus API to bring normalized IRS BMF data directly into your application.

Get an API Key →