Federal Audit Clearinghouse API
Pricing
from $1.91 / 1,000 item extracteds
Federal Audit Clearinghouse API
Filter and export official FAC single-audit submissions, auditees, auditors, federal awards, findings, and corrective-action records.
Pricing
from $1.91 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Export official Federal Audit Clearinghouse (FAC) single-audit data without building your own FAC API integration. Filter submissions, auditees, primary and secondary auditors, federal awards, findings, finding narratives, and corrective-action plans into one Apify dataset.
The Actor is designed for recurring grant-risk monitoring, compliance research, due diligence, and reproducible data pipelines. It queries the public FAC API directly and preserves the complete official source row inside each result.
What does this Federal Audit Clearinghouse Actor do?
The Actor turns FAC's technical public endpoints into a validated Apify input and a consistent dataset.
You can:
- search audit submissions by year, state, entity type, auditee name, UEI, acceptance date, or total federal expenditures;
- retrieve one or more known FAC reports by stable report ID;
- export federal award rows and their program, cluster, expenditure, loan, direct-award, and finding fields;
- collect finding flags, finding narratives, and management corrective actions;
- export primary audit-firm details from submissions and secondary-auditor rows;
- schedule the same filters and compare datasets over time;
- send results to spreadsheets, databases, webhooks, or another Actor.
No FAC login or API key is required. The Actor uses Data.gov's shared DEMO_KEY first and automatically falls back to FAC's anonymous search and per-report workbooks when that shared quota is exhausted. For faster scheduled or high-volume use, add your own free Data.gov API key to get a private request quota.
Who is this Actor for?
- Grant compliance teams tracking recipients with findings, questioned costs, repeat findings, or material weaknesses.
- Due-diligence analysts checking an organization's audit history and federal expenditure profile.
- CPA and audit-market researchers mapping audited entities to primary and secondary audit firms.
- Federal program teams exporting awards and findings tied to an Assistance Listing or program.
- Investigative and academic researchers building reproducible extracts from official public records.
- Data engineers replacing manual CSV downloads with scheduled typed datasets.
Why use the Actor instead of downloading FAC CSV files?
FAC's bulk files are valuable, but current tables can be hundreds of megabytes or more than one gigabyte. Repeatedly downloading and joining them is inefficient when you need a bounded slice.
This Actor:
- sends filters to the official JSON API;
- paginates only until
maxItemsis reached; - validates filter syntax before making requests;
- resolves matching report IDs when a related table lacks state, name, entity-type, or total-expenditure columns;
- adds consistent top-level fields for filtering in Apify;
- keeps the complete original FAC row under
data.
The Actor does not infer risk scores, enrich records with private data, or claim that an audit finding proves wrongdoing.
What Federal Audit Clearinghouse data can I extract?
| Record type | Input value | Typical fields |
|---|---|---|
| Audit submissions | audits | Auditee name, UEI, EIN, address, contact, primary auditor, audit period, opinions, risk flags, total amount expended |
| Federal awards | federalAwards | Award reference, agency prefix, program name, cluster, amount expended, direct/major/loan flags, finding count |
| Findings | findings | Finding reference, award reference, material weakness, modified opinion, questioned costs, repeat finding, deficiency flags |
| Finding details | findingDetails | Finding reference, finding text, context fields supplied by FAC |
| Corrective actions | correctiveActions | Finding reference, chart/table flag, management's planned action |
| Secondary auditors | secondaryAuditors | Auditor name, EIN, contact details, and address |
Every result includes recordType, reportId, auditeeUei, auditYear, acceptedDate, sourceUrl, fetchedAt, and data. Type-specific convenience fields are populated when available and otherwise remain null.
Getting started
- Open the Actor in Apify Console.
- Choose one or more Record types.
- Add filters such as audit year, state, auditee name, UEI, or FAC report ID.
- Set Maximum records to control dataset size and cost.
- Optionally add a free Data.gov API key for a private quota.
- Click Start.
- Open the FAC records dataset view or export the dataset as JSON, CSV, Excel, XML, or RSS.
A safe first run is:
{"recordTypes": ["audits"],"auditYears": [2024],"states": ["CA"],"entityTypes": ["non-profit"],"maxItems": 10}
Input parameters
| Field | Type | Default | Meaning |
|---|---|---|---|
recordTypes | string array | ["audits"] | FAC collections to export |
reportIds | string array | empty | Exact IDs such as 2023-01-GSAFAC-0000000854 |
auditYears | integer array | empty | Audit years from 2016 onward |
states | string array | empty | Two-letter auditee state or territory codes |
entityTypes | string array | empty | State, local, tribal, higher education, nonprofit, or unknown |
auditeeUeis | string array | empty | Exact 12-character Unique Entity Identifiers |
auditeeName | string | empty | Case-insensitive organization name fragment |
acceptedFrom | date | empty | Earliest FAC acceptance date, inclusive |
acceptedTo | date | empty | Latest FAC acceptance date, inclusive |
minTotalAmountExpended | number | empty | Minimum total federal expenditures in USD |
maxItems | integer | 100 | Maximum records across all selected types, from 1 to 10,000 |
apiKey | secret string | shared demo key | Optional free Data.gov key for private request limits |
General-only filters such as state, entity type, auditee name, and minimum total expenditures also work for related record types. The Actor first finds matching audit report IDs and then constrains the selected related endpoint.
Output example
The following shortened example reflects the Actor's output shape. The nested data object contains all fields returned by FAC for that collection.
{"recordType": "federalAwards","reportId": "2023-01-GSAFAC-0000000854","auditeeUei": "MW4NM5KU2M81","auditYear": 2023,"acceptedDate": "2023-10-12","auditeeName": null,"auditeeState": null,"totalAmountExpended": null,"federalProgramName": "CONSOLIDATED HEALTH CENTERS","amountExpended": 5077742,"findingReference": null,"plannedAction": null,"auditorName": null,"sourceUrl": "https://app.fac.gov/dissemination/summary/2023-01-GSAFAC-0000000854","fetchedAt": "2026-08-13T12:00:00.000Z","data": {"report_id": "2023-01-GSAFAC-0000000854","award_reference": "AWARD-0001","federal_agency_prefix": "93","amount_expended": 5077742}}
Contact fields can be present in public FAC submissions. Handle them only for a legitimate research or compliance purpose and follow applicable rules.
How filtering related records works
Fields differ between FAC collections. For example, federal_awards has a report ID and UEI but not the auditee's state.
When you request awards for states: ["TX"], the Actor:
- queries
generalwith the Texas filter; - collects matching FAC report IDs;
- queries
federal_awardsonly for those IDs; - stops when the overall
maxItemslimit is reached.
This is an exact source join on FAC report IDs, not a fuzzy organization-name match.
When multiple record types are selected, they are processed in the order shown in the input. Because maxItems applies globally, use separate runs if every collection needs its own independent limit.
How much does it cost to export Federal Audit Clearinghouse records?
Pricing uses one $0.0001 start event and one item event for each saved dataset row. Rejected, duplicate, empty, or failed records are not charged as items.
Current item prices decrease by Apify plan:
| Plan | Price per saved record |
|---|---|
| FREE | $0.003657 |
| BRONZE | $0.00318 |
| SILVER | $0.0024804 |
| GOLD | $0.001908 |
| PLATINUM | $0.001272 |
| DIAMOND | $0.0008904 |
On BRONZE, approximate Actor charges are:
- 10 records:
$0.0319including the start event; - 100 records:
$0.3181including the start event; - 1,000 records:
$3.1801including the start event.
Apify platform usage and any costs associated with your own integrations are separate. A run that performs a report-ID join may make an extra FAC request but does not create a separate Actor charge event.
Scheduling grant-risk monitoring
Use an Apify Schedule for a repeatable monitor:
- choose a narrow acceptance window, state, entity type, or known UEIs;
- select
findings,findingDetails, orcorrectiveActions; - set a result limit appropriate for the expected window;
- run daily, weekly, or monthly;
- connect a webhook or integration to compare the new dataset with prior results.
The Actor returns current source data. It does not maintain a historical change database by itself. Your workflow should retain prior datasets if change detection is required.
Export and integration patterns
Useful patterns include:
- export audit submissions to Google Sheets for review;
- load award rows into BigQuery, Snowflake, PostgreSQL, or a data lake;
- trigger a webhook when a scheduled dataset contains repeat findings;
- join FAC
auditeeUeiwith federal spending or organization reference data; - group primary and secondary auditors for audit-market analysis;
- send finding narratives to a controlled internal review workflow.
Apify's dataset API supports JSON, JSONL, CSV, Excel, XML, and RSS output formats.
Run with the Apify API
Replace APIFY_TOKEN with your Apify token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~federal-audit-clearinghouse-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"recordTypes":["findings"],"auditYears":[2024],"states":["TX"],"maxItems":25}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/federal-audit-clearinghouse-scraper').call({recordTypes: ['federalAwards'],reportIds: ['2023-01-GSAFAC-0000000854'],maxItems: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("APIFY_TOKEN")run = client.actor("automation-lab/federal-audit-clearinghouse-scraper").call(run_input={"recordTypes": ["audits"],"auditYears": [2024],"entityTypes": ["higher-ed"],"maxItems": 50,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/federal-audit-clearinghouse-scraper"
Claude Desktop
Add this server to your Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/federal-audit-clearinghouse-scraper"}}}
Cursor
Add the same mcpServers.apify.url value to Cursor's MCP settings, then enable the apify server.
VS Code
Add the same HTTP endpoint as an MCP server in your VS Code MCP configuration and start the server from the MCP panel.
Example prompts:
- "Export 2024 Texas nonprofit FAC audits with at least $2 million in federal expenditures."
- "Get federal award rows for FAC report 2023-01-GSAFAC-0000000854."
- "Find 2023 California audit findings and include the official source links."
Limits and expected failure behavior
- The current GSA FAC data covers 2016 onward; historic Census bulk files are outside this Actor's current contract.
- The shared Data.gov
DEMO_KEYhas a low, shared request quota. On HTTP 429, the Actor automatically retrieves the same official records through FAC's anonymous search and per-report XLSX exports. - The fallback downloads a workbook for each matching report, so a free private Data.gov API key is faster for scheduled, concurrent, or larger runs.
- FAC can change its schema. The Actor preserves new source fields in
data, while stable convenience fields remain backward compatible. maxItemsapplies across selected record types rather than separately to each type.- Very broad joins can resolve only the bounded set of report IDs needed for the requested output limit.
- The Actor does not download audit PDFs or provide legal conclusions.
- FAC may suppress records that are not public; the Actor cannot return unavailable records.
Malformed filters fail before extraction. Deterministic HTTP errors are not retried blindly. HTTP 429 and transient server errors receive bounded retries, then the run fails rather than returning a misleading partial success.
Troubleshooting
What happens when the shared Data.gov key is rate limited?
The Actor switches automatically to FAC's anonymous public search and official per-report XLSX exports, preserving complete source rows without requiring a credential. This route can be slower because it downloads one small workbook per matching audit. For high-volume or scheduled runs, request a free Data.gov key and paste it into the secret apiKey input. The key is used only in the request header and is not written to the dataset or logs.
Why are some convenience fields null?
FAC collections have different columns. Award rows contain program and award expenditure fields but not the auditee name or state. The complete source row is always available under data.
Why did I get fewer records than expected?
Check maxItems, acceptance dates, entity type spelling, UEIs, and report IDs. Also remember that the limit is shared across all selected record types.
Can I query records before 2016?
Not with this version. FAC publishes a separate historic Census dataset with a different schema. Mixing the two would create false field equivalence, so the Actor currently keeps a clear 2016+ scope.
Responsible use and legality
FAC states that its collected data is public domain. Public availability does not remove every responsibility.
- Use data for a lawful compliance, research, reporting, or due-diligence purpose.
- Follow applicable privacy, anti-discrimination, records-retention, and outreach rules.
- Do not treat an audit finding as proof of fraud or misconduct.
- Verify material decisions against the official FAC summary and underlying audit documentation.
- Protect contact details and avoid unsolicited or abusive use.
- Respect FAC and Data.gov service limits.
This Actor is an independent automation tool and is not affiliated with or endorsed by GSA, FAC, or Data.gov.
Frequently asked questions
Does the Actor require a FAC account?
No. It reads public dissemination data and never uses the audit-submission login.
Does it require a proxy or browser?
No. It uses the official HTTPS JSON API and FAC's anonymous public report exports directly. There is no residential-proxy fallback.
Can it search by organization name?
Yes. auditeeName performs a case-insensitive FAC API match. Parentheses, commas, and wildcard characters are rejected to keep query semantics predictable.
Can it export auditors?
Yes. Primary audit-firm and contact fields are part of audits; select secondaryAuditors for separate secondary-auditor records.
Does it calculate a risk score?
No. It returns official fields such as repeat-finding, material-weakness, questioned-cost, opinion, and low-risk-auditee indicators. Interpret them in context.
Related automation-lab Actors
- USAspending Scraper — retrieve federal spending records for award and recipient context.
- USAspending Subawards Scraper — inspect subaward relationships tied to federal funding.
- USAspending Loans Scraper — export federal loan assistance records.
Use FAC for audit opinions, findings, auditors, and corrective actions; use USAspending Actors when transaction or award-spending context is the primary job.