# GAO Reports Scraper (`parseforge/gao-reports-scraper`) Actor

Scrapes GAO reports, testimony, bid protests, legal decisions, and open recommendations from the official feed. Returns each record as a flat row with title, date, summary, and report number.

- **URL**: https://apify.com/parseforge/gao-reports-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### GAO Reports Scraper

**Scrape GAO reports, testimony, bid protests, legal decisions, and open recommendations from the official feed.** Each record includes the title, publication date, summary, and report number. No API key or login. Export to CSV, JSON, Excel, or XML.

The GAO website offers no bulk download, and its search interface is built for one query at a time. This Actor reads the public GAO feeds directly, filters by publication type and keyword, and returns every match in one flat schema. It is the fastest way to build a dataset of federal oversight documents for research, compliance, or news monitoring.

| Who uses it | What they scrape GAO for |
|---|---|
| Policy researchers | Tracking which federal programs the GAO is auditing this quarter |
| Government contractors | Monitoring bid protest decisions that affect their industry |
| Journalists | Finding GAO reports on a specific agency or topic for an investigation |
| Compliance officers | Collecting open recommendations to prepare for an audit |
| Data analysts | Building a time series of GAO publications for trend analysis |

### What it does

This Actor collects GAO publications by feed type and optional keyword, and returns each one as a flat row with title, publication date, summary, and report number.

- 📄 **Five publication feeds:** reports, congressional testimony, bid protests, legal decisions, and open recommendations.
- 🔍 **Keyword filter:** match the title or description, case-insensitive, so only relevant records reach your dataset.
- 📦 **Flat output:** every record is one row with the same fields, ready for CSV, JSON, Excel, or XML.
- ⚡ **No API key:** the Actor reads the public GAO feeds directly, with no registration or rate limits.
- 🔢 **Scalable runs:** pull up to 1,000,000 records on a paid plan, or 10 on the free tier.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with GAO data

**📈 Track oversight trends.**

A policy researcher runs the Actor weekly on the reports feed with no keyword, then charts publication counts by agency to see where oversight is intensifying.

**⚖️ Monitor bid protest outcomes.**

A government contractor runs the bidProtests feed with a keyword for their industry, then reviews each decision to adjust their proposal strategy.

**📰 Find stories in federal audits.**

A journalist runs the reports feed with a keyword for a specific agency, then reads the summaries to identify reports worth a deeper look.

**🧾 Prepare for an audit.**

A compliance officer runs the openRecommendations feed with a keyword for their program, then compiles the list of unresolved recommendations to address before the next review.

**📊 Build a research dataset.**

A data analyst runs the legalDecisions feed with no keyword, then exports the full history to CSV for statistical analysis of decision patterns.

### Why choose this scraper

|  | What you get |
|---|---|
| **Official source** | Data comes straight from the GAO public feeds, not a third-party mirror |
| **One fixed schema** | Every record has the same fields, so you can merge runs without cleaning |
| **No code required** | Set the feed and keyword in the input, then download the result |
| **Export anywhere** | CSV, JSON, Excel, or XML, ready for your existing workflow |

### How it compares

No other Store actor targets GAO the same way, so the honest comparison is with the alternatives teams actually weigh.

| | GAO Reports Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When GAO changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor from a publication feed and an optional keyword, and the filter runs as each record is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10
}
```

A larger pull:

```json
{
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [GAO Reports Scraper](https://apify.com/parseforge/gao-reports-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to GAO through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/gao-reports-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check your keyword. It is matched case-insensitively against the title and description, but if it is too specific or misspelled, no records will match. Try a broader keyword or leave it empty.

**Why did I only get 10 records?**

Free users are limited to 10 records per run. Upgrade to a paid plan and set maxItems higher to get more.

**Why is the run slow?**

The Actor reads the GAO feed in pages. If you set maxItems very high, it may take a few minutes. Reduce maxItems or narrow the keyword to speed it up.

**Why are some fields empty?**

Not every GAO record has every field. For example, some records may not have a summary or a report number. Empty fields are normal and are returned as blank in the output.

**Can I get the full text of each report?**

No. The Actor returns the metadata from the feed, including the summary, but not the full PDF text. You can use the report URL in the output to download the full document.

### FAQ

| Question | Answer |
|---|---|
| What is the GAO? | The U.S. Government Accountability Office is an independent agency that audits federal programs and spending. Its reports, testimony, bid protest decisions, and legal opinions are public records. |
| Do I need an API key or login? | No. The Actor reads the public GAO feeds directly, so there is no registration, OAuth, or rate limit to manage. |
| What is the difference between the five feeds? | Reports are formal audit reports. Testimony is prepared statements for congressional hearings. Bid protests are decisions on contract award challenges. Legal decisions are GAO legal opinions. Open recommendations are unresolved suggestions to agencies. |
| How does the keyword filter work? | The keyword is matched case-insensitively against the title and description of each record. Only records that contain the keyword are returned. |
| Can I scrape all GAO reports? | Yes. Set the feed to reports and leave the keyword empty, then set maxItems to a high number on a paid plan. The Actor will return every report in the feed. |
| What fields are in the output? | Each record includes the title, publication date, summary, report number, and other metadata from the GAO feed. The exact field list is shown in the sample output. |
| How many records can I get? | Free users can get up to 10 records per run. Paid users can set maxItems up to 1,000,000. |
| Can I filter by date? | The current input schema does not have a date filter. You can filter by feed and keyword, then sort or filter the exported data by date in your own tool. |
| Is this legal? | Yes. GAO publications are U.S. government works and are in the public domain. The Actor only reads publicly available feeds. |
| Can I schedule this Actor? | Yes. On Apify, you can schedule the Actor to run daily, weekly, or on any cron schedule, so your dataset stays current. |

### Related actors

- [gao-reports-scraper](https://apify.com/parseforge/gao-reports-scraper?fpr=vmoqkp): Use this Actor to scrape GAO reports, testimony, bid protests, legal decisions, and open recommendations.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by U.S. Government Accountability Office. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `maxItems` (type: `integer`):

Free users: 10. Paid: up to 1,000,000

## `feed` (type: `string`):

GAO publication type

## `keyword` (type: `string`):

Match title or description (case-insensitive)

## Actor input object example

```json
{
  "maxItems": 10,
  "feed": "reports"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/gao-reports-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/gao-reports-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10
}' |
apify call parseforge/gao-reports-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/gao-reports-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/P4vGy8QW4K9NY95hk/builds/QZuoaM2eOtEjBuLR7/openapi.json
