Pactman Developer Resources · Nonprofit verification answers for developers and compliance teams
Home  /  Artifacts  /  How to Verify a Nonprofit Before Making a Donation
Artifact · Developer How-To

How to Verify a Nonprofit Before Making a Donation

Use the nonprofit's EIN with Pactman Nonprofit Check Plus API, confirm the returned organization, then evaluate IRS BMF status, Pub. 78 verification and contribution information, revocation and reinstatement history, OFAC screening, source conflicts and freshness. Treat these as separate decision signals rather than assuming that a valid EIN alone means the organization is appropriate for a donation.

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

Direct answer

Before making a donation, use the nonprofit's EIN with Pactman Nonprofit Check Plus API and verify the organization across the IRS, deductibility, revocation and sanctions signals returned in the response.

A practical donation check should confirm the organization identity, review bmf_status and IRS classification information, evaluate pub78_verified and the organization_types contribution information when deductibility matters, review revocation and reinstatement history, check ofac_status, and account for source conflicts and freshness. Do not treat possession of an EIN by itself as proof that a donation should proceed.

  1. Get and 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 for one prospective recipient.
  3. Confirm the organization. Match ein and organization_name to the nonprofit the donor intended to support.
  4. Review IRS BMF status. Evaluate bmf_ein, bmf_status, bmf_subsection, subsection_description and exempt_status_code.
  5. Check Pub. 78 when deductibility matters. Review pub78_ein, pub78_verified and the organization_types array.
  6. Interpret contribution information. Within organization_types, review organization_type, deductibility_limitation and deductibility_status_description rather than inferring deductibility from the nonprofit's name or EIN.
  7. Check revocation and reinstatement. Review revocation_code, revocation_date and reinstatement_date before treating a historical revocation record as the organization's current status.
  8. Check sanctions screening. Review ofac_status separately from IRS tax status.
  9. Check conflicts and freshness. Review irs_bmf_pub78_conflict, most_recent_bmf, most_recent_pub78 and organization_info_last_modified.
  10. Handle religious-organization exceptions explicitly. When populated, review pub78_church_message and bmf_church_message instead of treating ordinary source absence as an automatic failure.

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 nonprofit the donor intended to support. Continue only when the EIN resolves to the expected organization.
bmf_status and IRS classification bmf_status shows whether the organization appears in the IRS Business Master File data used by Pactman, while bmf_subsection, subsection_description and exempt_status_code provide classification context. Use these as IRS-status inputs rather than relying on the EIN alone.
pub78_verified Indicates whether the organization is included in the most recent Publication 78 data used by Pactman. Treat as an important deductibility-related signal when tax-deductible contribution eligibility matters.
organization_types Contains contribution-related information returned from Pub. 78, including organization_type, deductibility_limitation and deductibility_status_description. Use the returned contribution classification and limitation in the donation workflow instead of inventing a generic deductible/not-deductible rule.
Foundation classification foundation_code, foundation_code_description, foundation_type_code and foundation_type_description preserve public-charity/private-foundation context. Apply the contribution rules appropriate to the returned organization type.
Revocation fields revocation_code, revocation_date and reinstatement_date expose revocation-related history. Review reinstatement before treating a historical revocation record as a current reason to reject the donation.
ofac_status Indicates whether the organization is included on the OFAC SDN list according to the Pactman response. Route a sanctions-related result through the donor or platform's compliance policy separately from IRS tax-status logic.
irs_bmf_pub78_conflict Indicates whether BMF and Pub. 78 differ on the organization's private-foundation classification. Preserve and review the disagreement instead of silently choosing one source.
Source dates most_recent_bmf, most_recent_pub78 and organization_info_last_modified provide freshness context. Use them when deciding whether the information is current enough for the donation workflow.

Example decision logic

A practical donation workflow might allow a nonprofit to proceed only after the application has:

  • matched the returned ein and organization_name to the intended recipient;
  • reviewed the BMF status and classification signals required by the platform;
  • evaluated pub78_verified and organization_types when deductible-contribution eligibility matters;
  • reviewed revocation and reinstatement information;
  • evaluated ofac_status under the platform's sanctions policy;
  • handled any irs_bmf_pub78_conflict; and
  • considered the source dates before treating the result as current.

The supplied bulk sample provides a clean donation-oriented example. For EIN "680343125" as at September 28th 2026, Pactman returns bmf_status: true, pub78_verified: true, deductibility_status_description: "PC", deductibility_limitation: "50%", and an ofac_status stating that the organization was not included in the OFAC SDN list. The same response has revocation_code, revocation_date and reinstatement_date as null.

Important: Do not hard-code a universal definition of "safe to donate" or "verified for donation." A consumer donation page, donor-advised fund, payroll-giving platform, grant-management system or compliance team may apply different acceptance rules to the same underlying signals.

Why use a consolidated nonprofit verification API?

A donation workflow can require several questions to be answered at once: Is this the intended organization? Does it appear in the IRS BMF data? Is it included in Pub. 78? What contribution classification does Pub. 78 return? Is there revocation history? Is there an OFAC signal? Are the IRS sources in conflict, and how recent are they?

Pactman Nonprofit Check Plus API 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 donation-verification logic can be reused for one-off checks and higher-volume donation workflows.

One normalized response

Evaluate organization identity, IRS BMF, Pub. 78, contribution information, revocation and OFAC screening from one Pactman response model.

Separate source signals

Keep bmf_status, pub78_verified, organization_types, revocation fields, ofac_status and irs_bmf_pub78_conflict separate so the application retains the meaning of each source.

Reusable compliance rules

Apply the same nonprofit-verification policy across donation checkout, donor-advised fund, payroll-giving and recurring donation workflows while allowing each product to set its own acceptance rules.

Developer-friendly automation

Move pre-donation verification into the application workflow instead of requiring a donor or employee to manually compare IRS, revocation and sanctions information for every nonprofit.

Frequently asked questions

Is an EIN enough to verify a nonprofit before donating?

No. An EIN identifies an entity, but your workflow should also evaluate the returned organization identity, IRS BMF signals, Pub. 78 information, revocation history and any sanctions-screening result relevant to your policy.

How do I know whether a donation may be tax deductible?

Review pub78_verified together with the organization_types information, including organization_type, deductibility_limitation and deductibility_status_description. Keep this separate from a general IRS BMF-presence check.

What if the nonprofit appears in revocation data?

Review revocation_code, revocation_date and reinstatement_date together. The presence of revocation history should not be treated as the organization's current status without considering reinstatement information.

Should OFAC screening be part of a donation check?

When sanctions screening is part of the donation platform's compliance policy, evaluate ofac_status as a separate decision signal. IRS tax status and OFAC screening answer different compliance questions.

Next step

Use the Pactman API response to confirm the intended nonprofit, evaluate IRS BMF and Pub. 78 contribution signals, then explicitly handle revocation, OFAC, source conflicts and freshness before allowing the donation workflow to proceed under your application's rules.

Ready to automate nonprofit donation checks?

Use Pactman Nonprofit Check Plus API to connect nonprofit verification directly to your donation workflow.

Get an API Key →