<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Developer Talha</title>
    <description>The latest articles on DEV Community by Developer Talha (@talhamohsin).</description>
    <link>https://dev.to/talhamohsin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3254417%2F3cd2e075-83cc-4401-9f16-e9e680b9cbc8.jpg</url>
      <title>DEV Community: Developer Talha</title>
      <link>https://dev.to/talhamohsin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/talhamohsin"/>
    <language>en</language>
    <item>
      <title>A Deep Dive into Pactman’s Nonprofit Check Plus API</title>
      <dc:creator>Developer Talha</dc:creator>
      <pubDate>Mon, 09 Jun 2025 21:52:32 +0000</pubDate>
      <link>https://dev.to/talhamohsin/a-deep-dive-into-pactmans-nonprofit-check-plus-api-58m1</link>
      <guid>https://dev.to/talhamohsin/a-deep-dive-into-pactmans-nonprofit-check-plus-api-58m1</guid>
      <description>&lt;p&gt;By Muhammad Talha Mohsin | Published on 6/09/2025&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What This Article Covers&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Why nonprofit verification matters more than ever&lt;/li&gt;
&lt;li&gt;What Pactman's Nonprofit Check Plus API actually does&lt;/li&gt;
&lt;li&gt;How it works — with real JSON and code&lt;/li&gt;
&lt;li&gt;How fast and reliable it is (with a graph!)&lt;/li&gt;
&lt;li&gt;How to use it as a developer&lt;/li&gt;
&lt;li&gt;Common data freshness issues — and how the API handles them&lt;/li&gt;
&lt;li&gt;Who should use this API&lt;/li&gt;
&lt;li&gt;Plans, pricing, and final thoughts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Verifying Charities Matters in 2025&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We live in a time when donations happen with a click. Platforms, apps, and grant systems must know:&lt;br&gt;
Is this nonprofit real? Is it tax-exempt? Is it clean from sanctions?&lt;/p&gt;

&lt;p&gt;That’s where the &lt;a href="https://pactman.org/nonprofitcheckplus-api/landing" rel="noopener noreferrer"&gt;Pactman Nonprofit Check Plus API&lt;/a&gt; comes in. It's designed to give real-time charity verification using official data from the IRS, OFAC, BMF, and Pub 78.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjy741keu8vstlghnfhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftjy741keu8vstlghnfhb.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;What Is the Nonprofit Check Plus API?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It’s a modern API that verifies nonprofits using their EIN (Employer Identification Number).&lt;/p&gt;

&lt;p&gt;Here’s what it checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tax-exempt status via IRS BMF&lt;/li&gt;
&lt;li&gt;Inclusion in IRS Pub 78&lt;/li&gt;
&lt;li&gt;Absence from the OFAC SDN (Sanctions) list&lt;/li&gt;
&lt;li&gt;Info on deductibility and foundation type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnovf82yrighv4cev42bm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnovf82yrighv4cev42bm.webp" alt="Image description" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is not a basic database—it’s a live compliance engine built for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Grant platforms&lt;/li&gt;
&lt;li&gt;Donor-advised funds&lt;/li&gt;
&lt;li&gt;CRMs&lt;/li&gt;
&lt;li&gt;Banking apps&lt;/li&gt;
&lt;li&gt;Fintech payment tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;What You Get: Sample API Response&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here's what a real result from the API looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "code": 200,
  "message": "OK",
  "errors": null,
  "data": {
    "pactman_org_url": "https://pactman.org/profile/nonprofit/aborjaily-bannish-foundation-r5U9r8yRcZ",
    "organization_info_last_modified": "5/02/2025 1:01:39 AM",
    "ein": "996589560",
    "organization_name": "ABORJAILY BANNISH FOUNDATION",
    "organization_name_aka": null,
    "address_line1": "50 LOWELL AVE",
    "address_line2": null,
    "city": "WESTFIELD",
    "state": "MA",
    "state_name": "Massachusetts",
    "zip": "01085-2643",
    "filing_req_code": "00",
    "pub78_church_message": null,
    "pub78_organization_name": "Aborjaily Bannish Foundation",
    "pub78_ein": "996589560",
    "pub78_verified": true,
    "pub78_city": "Westfield",
    "pub78_state": "MA",
    "pub78_indicator": "0",
    "organization_types": [
      {
        "organization_type": "Deductions for donations to private non-operating foundations are generally limited to 50 percent of adjusted gross income (AGI). This limit increases to 60% of AGI for cash donations.  For Non-Cash assets held for more than one year, the limit is 30% of AGI.",
        "deductibility_limitation": "50%",
        "deductibility_status_description": "PF"
      }
    ],
    "most_recent_pub78": "3/10/2025 12:00:00 AM",
    "bmf_church_message": null,
    "bmf_organization_name": "ABORJAILY BANNISH FOUNDATION",
    "bmf_ein": "996589560",
    "bmf_status": true,
    "most_recent_bmf": "3/10/2025 12:00:00 AM",
    "bmf_subsection": "03",
    "subsection_description": "501(c)(3) Public Charity",
    "foundation_code": "04",
    "foundation_code_description": null,
    "ruling_month": "07",
    "ruling_year": "2024",
    "group_exemption": "0000",
    "exempt_status_code": "01",
    "ofac_status": "This organization was NOT included in the Office of Foreign Assets Control Specially Designated Nationals (SDN) list.",
    "revocation_code": null,
    "revocation_date": null,
    "reinstatement_date": null,
    "irs_bmf_pub78_conflict": false,
    "foundation_509a_status": "N/A",
    "report_date": "6/17/2025 8:27:00 PM",
    "foundation_type_code": "pf",
    "foundation_type_description": "Private non-operating foundation (section 509(a))"
  },
  "took": 8,
  "nonprofit_check_count": 1
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The org is real&lt;/li&gt;
&lt;li&gt;Tax-exempt&lt;/li&gt;
&lt;li&gt;Not on any U.S. watchlists&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Fast and Reliable Is It?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s how the API performed across 2,143 calls:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foccmjdzq4isy3oewvjm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foccmjdzq4isy3oewvjm0.png" alt="Image description" width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rsi3sfj4mqlhuwuf61n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2rsi3sfj4mqlhuwuf61n.jpg" alt="Image description" width="669" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How Developers Can Use It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Example: Single EIN Lookup in Python&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
import json
from datetime import datetime

EIN = "996589560"
API_URL = f"https://entities.pactman.org/api/entities/nonprofitcheck/v1/us/ein/{EIN}"

response = requests.get(API_URL)

if response.status_code == 200:
    raw = response.json()
    data = raw["data"]

    # Deductibility logic
    org_types = data.get("organization_types", [])
    deductibility = {
        "cash": "60% of AGI",
        "non_cash": "30% of AGI",
        "standard": "50% of AGI"
    }
    if org_types:
        first_type = org_types[0]
        if "deductibility_limitation" in first_type:
            deductibility["standard"] = first_type["deductibility_limitation"]

    # Date parsing for ISO format
    def to_iso(date_str):
        try:
            return datetime.strptime(date_str, "%m/%d/%Y %I:%M:%S %p").isoformat() + "Z"
        except Exception:
            return None

    output = {
        "status": raw["code"],
        "message": raw["message"],
        "data": {
            "legal_name": data.get("organization_name"),
            "ein": data.get("ein"),
            "irs_status": data.get("subsection_description"),
            "foundation_type": data.get("foundation_type_description"),
            "deductibility": deductibility,
            "address": {
                "street": data.get("address_line1"),
                "city": data.get("city"),
                "state": data.get("state"),
                "zip": data.get("zip")
            },
            "last_updated": to_iso(data.get("organization_info_last_modified"))
        },
        "took_ms": raw["took"]
    }

    print(json.dumps(output, indent=2))
else:
    print("Error:", response.status_code, response.text)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;API Response (Simplified for Developer Use)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "status": 200,
  "message": "OK",
  "data": {
    "legal_name": "ABORJAILY BANNISH FOUNDATION",
    "ein": "996589560",
    "irs_status": "501(c)(3) - Public Charity",
    "foundation_type": "Private non-operating foundation (section 509(a))",
    "deductibility": {
      "cash": "60% of AGI",
      "non_cash": "30% of AGI",
      "standard": "50% of AGI"
    },
    "address": {
      "street": "50 LOWELL AVE",
      "city": "WESTFIELD",
      "state": "MA",
      "zip": "01085-2643"
    },
    "last_updated": "2025-05-02T01:01:39Z"
  },
  "took_ms": 8
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Fields for Developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0tjf88qk9m2kmc5fp2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa0tjf88qk9m2kmc5fp2i.png" alt="Image description" width="800" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Donation Platforms – Verify tax-deductible status before processing donations.&lt;/li&gt;
&lt;li&gt;Grant Management Systems – Automatically validate nonprofit eligibility.&lt;/li&gt;
&lt;li&gt;Financial Software – Check deductibility limits for tax reporting.&lt;/li&gt;
&lt;li&gt;Nonprofit Directories – Pull the latest IRS-recognized org data.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚠️ Best Practice: Keep batches ≤ 50 EINs to avoid timeout delays.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foniiuozltny2rpg1izg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foniiuozltny2rpg1izg3.png" alt="Image description" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The IRS Delay Problem — And How Pactman Solves It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Even with the best tech, government data updates lag. Here's what to expect:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxp3pwbacu3f1dc2ey1r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxp3pwbacu3f1dc2ey1r6.png" alt="Image description" width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔐 But the API helps by exposing this field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"irs_bmf_pub78_conflict": true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So your system can flag mismatches, giving your team or clients the chance to double-check.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqyxn0ejpmxh4p3sofnq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqyxn0ejpmxh4p3sofnq.png" alt="Image description" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real Success Story: Automating Grants with DAFs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A top donor-advised fund (DAF) provider integrated Pactman and reported:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcesxfl1bbjoj89xgv2vw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcesxfl1bbjoj89xgv2vw.png" alt="Image description" width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They replaced spreadsheet reviews with a smart system that "just worked."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29r9gjiz592wm4zh6q4v.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29r9gjiz592wm4zh6q4v.webp" alt="Image description" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Pricing and Access&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You don’t need a credit card to start using the API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsisy18rrs01wbrg034ip.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsisy18rrs01wbrg034ip.jpg" alt="Image description" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Secure with API Key&lt;/li&gt;
&lt;li&gt;📚 &lt;a href="https://pactman.org/nonprofitcheckplus-api/docs" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Support via email and online&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ms863ut1qx5f30akcrw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ms863ut1qx5f30akcrw.png" alt="Image description" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Who Should Use This API?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re building or working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fintechs managing donations&lt;/li&gt;
&lt;li&gt;CRMs for nonprofits&lt;/li&gt;
&lt;li&gt;Government grant systems&lt;/li&gt;
&lt;li&gt;Payment platforms needing charity compliance&lt;/li&gt;
&lt;li&gt;Banks and auditors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you need this API. It keeps your app compliant, fast, and trustworthy.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Thoughts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Pactman Nonprofit Check Plus API isn’t just a charity lookup tool — it’s an insurance policy for modern financial platforms. With real-time data from the IRS and OFAC, clean JSON, developer-first architecture, and low false positives, it’s a must-have for serious platforms.&lt;/p&gt;

&lt;p&gt;Start free today and never doubt your donations again.&lt;br&gt;
🔗 &lt;a href="https://pactman.org/nonprofitcheckplus-api/landing" rel="noopener noreferrer"&gt;Try the API Now&lt;/a&gt;&lt;/p&gt;

</description>
      <category>apiintegration</category>
      <category>jsonapi</category>
      <category>bulkprocessing</category>
      <category>nonprofittech</category>
    </item>
  </channel>
</rss>
