Pactman Developer Resources · Nonprofit verification answers for developers and compliance teams
Home  /  Artifacts  /  How to Verify a 501(c)(3) Organization Using Its EIN
Artifact · Developer How-To

How to Verify a 501(c)(3) Organization Using Its EIN

Send the organization's EIN to Pactman Nonprofit Check Plus API, confirm the returned organization, and evaluate the IRS Business Master File fields that describe tax-exempt classification. For a 501(c)(3) check, review `bmf_status`, `bmf_subsection`, `subsection_description` and `exempt_status_code`, then evaluate Pub. 78, foundation classification, revocation, conflict and source-freshness fields before applying your application's verification rule.

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

Direct answer

An EIN by itself does not prove that an organization is a 501(c)(3). Send the EIN to Pactman Nonprofit Check Plus API, confirm the returned organization, and evaluate the IRS classification fields returned for that EIN.

For a 501(c)(3) verification workflow, start with bmf_status, then review bmf_subsection and subsection_description to identify the tax-exempt subsection. Also evaluate exempt_status_code, Pub. 78 status, foundation classification, revocation and reinstatement information, and source freshness before treating the organization as currently verified for your use case.

  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 nonprofitcheck endpoint when checking one organization.
  3. Confirm the organization. Match ein and organization_name to the entity your user intended to verify.
  4. Confirm IRS BMF presence. Review bmf_ein and bmf_status before interpreting classification fields.
  5. Check the IRS subsection. Review bmf_subsection and subsection_description. In the current Pactman response model, subsection code "03" is the 501(c)(3) classification used in the supplied samples.
  6. Review exemption and determination context. Evaluate exempt_status_code, ruling_month and ruling_year as separate IRS signals.
  7. Keep 501(c)(3) status separate from foundation type. Use foundation_code, foundation_code_description, foundation_509a_status, foundation_type_code and foundation_type_description to preserve the public-charity/private-foundation classification returned by the API.
  8. Review Pub. 78 when contribution eligibility matters. Check pub78_ein and pub78_verified instead of assuming that 501(c)(3) classification and Pub. 78 inclusion are the same signal.
  9. Check revocation and reinstatement. Review revocation_code, revocation_date and reinstatement_date before treating historical revocation information as the organization's current status.
  10. Check conflicts and freshness. Review irs_bmf_pub78_conflict, most_recent_bmf, most_recent_pub78 and organization_info_last_modified before applying your final business rule.

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 single-EIN Nonprofit Check endpoint used in Pactman's Production/Customer Environment.

What your application should evaluate

Signal Why it matters Typical application decision
ein / organization_name Confirms that the API response belongs to the organization your user intended to verify. Continue only when the EIN and organization identity match the intended entity.
bmf_ein / bmf_status Shows whether the EIN appears in the IRS Business Master File data used by Pactman. Treat BMF presence as a prerequisite to interpreting the returned BMF classification fields.
bmf_subsection / subsection_description Identifies the IRS subsection classification returned from BMF data. The supplied current samples return subsection code "03" for 501(c)(3). Use the subsection as a primary classification signal for the 501(c)(3) check.
exempt_status_code Provides the EO status code describing the type of exemption held by the organization. Evaluate it alongside subsection data rather than using the EIN alone as proof of exemption.
ruling_month / ruling_year Provides the month and year associated with the IRS ruling or determination information returned by the API. Preserve as determination context or audit information where useful.
Foundation classification fields foundation_code, foundation_code_description, foundation_509a_status, foundation_type_code and foundation_type_description preserve public-charity/private-foundation classification separately from subsection. Do not assume every 501(c)(3) has the same foundation type.
pub78_verified Indicates whether the organization is included in the most recent Publication 78 data set used by Pactman. Use as a separate contribution-eligibility signal when Pub. 78 inclusion matters.
Revocation fields revocation_code, revocation_date and reinstatement_date provide revocation-related history returned by the API. Evaluate reinstatement information before treating a historical revocation record as current disqualification.
irs_bmf_pub78_conflict Indicates whether BMF and Pub. 78 differ on private-foundation classification. Route conflicting records through source-aware review rather than silently collapsing the sources.
Source dates most_recent_bmf, most_recent_pub78 and organization_info_last_modified provide freshness context for the returned information. Use source dates when deciding which record is more current or whether data should be rechecked.

Example decision logic

A practical implementation might treat an organization as verified as a 501(c)(3) only after the application has:

  • matched the returned ein and organization_name to the intended organization;
  • confirmed the relevant BMF presence through bmf_status and bmf_ein;
  • evaluated bmf_subsection and subsection_description for 501(c)(3) classification;
  • reviewed exempt_status_code and the returned foundation-classification fields rather than assuming all 501(c)(3) organizations have the same foundation type;
  • checked revocation and reinstatement information; and
  • evaluated source conflicts and freshness before applying the application's final rule.

If tax-deductible contribution eligibility also matters, evaluate pub78_verified separately. 501(c)(3) classification, Pub. 78 inclusion, foundation classification and revocation history are related signals, but the API exposes them independently so your application does not have to reduce them to one opaque status.

The supplied bulk sample provides a clean example. For EIN "680343125", the response returns bmf_status: true, bmf_subsection: "03", subsection_description: "501(c)(3) Public Charity", exempt_status_code: "01" and pub78_verified: true. Its foundation fields separately return foundation_type_code: "pc" and foundation_type_description: "Public charity described in section 509(a)(1) or (2)".

Important: Do not equate a valid EIN, BMF presence, Pub. 78 inclusion or one foundation field with a universal definition of "verified 501(c)(3)." The Nonprofit Check Plus API returns separate source and classification signals so each application can apply its own acceptance rules.

Why use a consolidated nonprofit verification API?

Verifying a 501(c)(3) by EIN requires more than checking whether the identifier exists. A production workflow may need to confirm IRS BMF presence, identify the subsection, preserve foundation classification, check Pub. 78 when deductibility matters, account for revocation and reinstatement, and compare source freshness.

Pactman Nonprofit Check Plus returns those signals in one normalized response. The supplied single-EIN and bulk samples use the same current 43 organization-level fields, so the same interpretation logic can be reused across individual and batch verification workflows.

One normalized response

Evaluate EIN identity, IRS BMF classification, Pub. 78, foundation type, revocation and freshness signals from one Pactman response model.

Separate source signals

Keep bmf_status, bmf_subsection, pub78_verified, foundation fields, revocation fields and irs_bmf_pub78_conflict separate so downstream logic retains the context of each source.

Reusable compliance rules

Apply the same 501(c)(3) verification policy across onboarding, donations, grantmaking and recurring reviews while allowing each workflow to set its own acceptance criteria.

Developer-friendly automation

Move 501(c)(3) verification into the application workflow instead of requiring a person to manually compare IRS classification, Pub. 78 and revocation information for each EIN.

Frequently asked questions

Does an EIN prove that an organization is a 501(c)(3)?

No. The EIN identifies the entity. Verify the returned BMF presence and classification fields, especially bmf_status, bmf_subsection, subsection_description and exempt_status_code, before treating the organization as a 501(c)(3) under your application's rules.

Does 501(c)(3) always mean public charity?

No. Preserve the foundation-classification fields returned by the API. foundation_code, foundation_509a_status, foundation_type_code and foundation_type_description provide classification information that should be evaluated separately from the 501(c)(3) subsection.

Should I require pub78_verified to verify a 501(c)(3)?

That depends on the question your application is answering. pub78_verified represents inclusion in the most recent Publication 78 data used by Pactman. Use it when Pub. 78 or contribution eligibility matters, but do not substitute it for the BMF subsection and exemption signals.

What if a 501(c)(3) has revocation history?

Review revocation_code, revocation_date and reinstatement_date together. A revocation record can be historical, so your application should not ignore reinstatement information when determining current status.

Next step

Use the Pactman API response to confirm the EIN and organization, evaluate BMF subsection and exemption signals, then preserve foundation type, Pub. 78, revocation and source-freshness information as separate inputs to your application's 501(c)(3) verification rule.

Ready to verify 501(c)(3) organizations?

Use Pactman Nonprofit Check Plus API to connect EIN-based nonprofit verification directly to your application.

Get an API Key →