Pactman Developer Resources · Nonprofit verification answers for developers and compliance teams
Home  /  Artifacts  /  How to Determine Whether a Nonprofit Is a Public Charity or Private Foundation
Artifact · Developer How-To

How to Determine Whether a Nonprofit Is a Public Charity or Private Foundation

Use the foundation-classification fields returned by Pactman Nonprofit Check Plus API. Review `foundation_type_code`, `foundation_type_description`, `foundation_code`, `foundation_code_description` and `foundation_509a_status`. Keep those fields separate from `bmf_subsection` and `subsection_description`, because subsection information alone should not be used as the sole public-charity/private-foundation classifier. Also review `pub78_verified`, contribution classification, source dates and `irs_bmf_pub78_conflict` before applying your application's final rule.

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

Direct answer

To determine whether a nonprofit is a public charity or private foundation, use Pactman's foundation-classification fields rather than relying on the BMF subsection alone.

Start with foundation_type_code and foundation_type_description, then review foundation_code, foundation_code_description and foundation_509a_status. Use pub78_verified, the Pub. 78 contribution classification, source dates and irs_bmf_pub78_conflict as supporting context when your workflow needs to reconcile foundation classification across IRS sources.

  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 organization or the bulk endpoint for multiple EINs.
  3. Confirm the organization. Match ein and organization_name to the nonprofit you intended to classify.
  4. Review foundation type. Evaluate foundation_type_code and foundation_type_description.
  5. Review the IRS foundation code. Evaluate foundation_code and foundation_code_description.
  6. Review 509(a) context. Use foundation_509a_status as an additional foundation-classification signal.
  7. Keep BMF subsection separate. Review bmf_subsection and subsection_description, but do not use them as the only public-charity/private-foundation classifier.
  8. Review Pub. 78 contribution classification. When relevant, evaluate pub78_verified and the organization_types information.
  9. Check for source disagreement. Review irs_bmf_pub78_conflict.
  10. Check freshness and status history. Review most_recent_bmf, most_recent_pub78, organization_info_last_modified, and revocation/reinstatement fields when the workflow needs a current classification decision.

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
foundation_type_code / foundation_type_description Provides the normalized foundation classification and its text description in the Pactman response. Use as a direct public-charity/private-foundation classification input.
foundation_code / foundation_code_description Provides the IRS foundation code and its textual description. Use to retain the underlying IRS organization-type context.
foundation_509a_status Provides additional 509(a) foundation-status context. Preserve as a separate classification attribute rather than overwriting the other foundation fields.
bmf_subsection / subsection_description Describes the BMF subsection classification. Use for tax-exempt subsection context, but not as the only public-charity/private-foundation classifier.
pub78_verified Indicates whether the organization is included in the most recent Publication 78 data set used by Pactman. Use when Pub. 78 classification or contribution eligibility matters to the workflow.
organization_types Contains Pub. 78 contribution information including organization_type, deductibility_limitation and deductibility_status_description. Preserve the Pub. 78 contribution classification as a separate source signal.
irs_bmf_pub78_conflict Indicates whether BMF and Pub. 78 differ on the organization's private-foundation classification. Route source disagreement through explicit review or source-aware logic.
Source dates most_recent_bmf, most_recent_pub78 and organization_info_last_modified provide freshness context. Use them when deciding which source information is current enough for the workflow.
Revocation fields revocation_code, revocation_date and reinstatement_date expose revocation-related history. Keep status history separate from foundation classification, but consider it when the broader workflow needs current eligibility.

Example decision logic

A practical foundation-classification layer might:

  • match ein and organization_name to the intended nonprofit;
  • classify the organization using foundation_type_code and foundation_type_description;
  • retain foundation_code, foundation_code_description and foundation_509a_status;
  • keep bmf_subsection and subsection_description as separate BMF classification attributes;
  • preserve Pub. 78 contribution classification when relevant;
  • flag irs_bmf_pub78_conflict instead of silently choosing one source; and
  • use source dates before treating a classification as current enough for the workflow.

The supplied bulk sample shows why these fields should remain separate. EIN "680343125" returns bmf_subsection: "03" and subsection_description: "501(c)(3) Public Charity", with foundation_code: "16", 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 the same subsection_description, while its foundation_code is "04", its foundation_type_code is "pf", and its foundation_type_description is "Private non-operating foundation (section 509(a))".

Important: The current sample demonstrates that BMF subsection and foundation classification are different dimensions. Do not hard-code a rule that assumes every record with the same bmf_subsection must have the same public-charity/private-foundation classification.

Why use a consolidated nonprofit verification API?

Public-charity/private-foundation determination can require more than one IRS-derived field. An application may need the foundation type, foundation code, 509(a) status, BMF subsection, Pub. 78 contribution classification, source-conflict flag and source dates to preserve the full classification context.

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

One normalized response

Evaluate foundation type, IRS foundation code, 509(a) status, BMF subsection and Pub. 78 context from one Pactman organization record.

Separate source signals

Keep foundation classification, BMF subsection, Pub. 78 contribution information and irs_bmf_pub78_conflict distinct so downstream logic preserves what each source actually says.

Reusable compliance rules

Apply one foundation-classification layer across grantmaking, donation, donor-advised fund, nonprofit onboarding and recurring compliance workflows.

Developer-friendly automation

Convert the returned foundation fields into structured application attributes so public-charity/private-foundation classification can happen automatically from an EIN.

Frequently asked questions

Which Pactman field should I use first for public-charity/private-foundation classification?

Start with foundation_type_code and foundation_type_description, then retain the supporting foundation_code, foundation_code_description and foundation_509a_status fields.

Can I determine public-charity/private-foundation status from bmf_subsection alone?

No. The supplied API samples show organizations with the same bmf_subsection value while their foundation classifications differ. Keep the subsection fields separate from the foundation-specific fields.

What does irs_bmf_pub78_conflict tell me?

It indicates whether BMF and Pub. 78 provide differing reports on the organization's classification as a private foundation. Use it to preserve and route a cross-source disagreement instead of silently collapsing the sources.

Should Pub. 78 contribution classification be stored separately?

Yes. organization_types contains Pub. 78 contribution information such as organization_type, deductibility_limitation and deductibility_status_description. Keep that information separate from the foundation classification fields so your application preserves the meaning of each source.

Next step

Use the Pactman foundation-specific fields as the primary public-charity/private-foundation classification inputs, preserve BMF subsection and Pub. 78 contribution data separately, and explicitly handle irs_bmf_pub78_conflict when IRS-derived sources disagree.

Ready to automate foundation classification?

Use Pactman Nonprofit Check Plus API to bring public-charity and private-foundation classification directly into your application.

Get an API Key →