# GSA eLibrary Scraper - Government Contractors & B2B Leads (`scrapesage/gsa-elibrary-scraper`) Actor

Scrape GSA eLibrary Schedule contractors by SIN, category or keyword: name, phone, email, website, address, SAM UEI, NAICS, set-aside status, contracts & a lead score. Filter by state & set-aside type. Monitor mode returns only new contractors. No login, no browser.

- **URL**: https://apify.com/scrapesage/gsa-elibrary-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 contractor scraped (basic)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## GSA eLibrary Scraper — Government Contractors, Schedules & B2B Leads

Extract **complete GSA Schedule contractor data** from [GSA eLibrary](https://www.gsaelibrary.gsa.gov/) — the official catalog of every company holding a GSA Multiple Award Schedule (MAS) contract. Pull **business email, phone, website, full address, SAM UEI, NAICS codes, set-aside / socio-economic status, every contract with SINs and end dates, GSA Advantage catalog links and the government POC** — then turn each contractor into a **ready-to-contact B2B lead** with a 0–100 lead score.

Browse by **category (SIN)**, search by **keyword**, or look up specific **contract numbers**. Filter by **state** and **set-aside type** (small business, SDVOSB, WOSB, 8(a), HUBZone). **Monitor mode** returns only newly awarded contractors.

No login, no API key, no browser — fast server-side extraction.

### Why this GSA eLibrary scraper?

GSA eLibrary lists hundreds of thousands of government contractors, but its pages are built for humans, not pipelines — and most scrapers stop at the name and contract number. This actor ships the **richest contractor record in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Company name + contract number | ✅ | ✅ |
| Phone, city & state | partial | ✅ |
| **Business email** | ❌ | ✅ |
| **Website** | ❌ | ✅ |
| Full street address + ZIP | ❌ | ✅ |
| **SAM UEI** (links to SAM.gov) | ❌ | ✅ |
| NAICS codes | ❌ | ✅ |
| Spelled-out set-aside / socio-economic status | partial | ✅ |
| Every contract: schedule, SINs, option & ultimate end dates | ❌ | ✅ |
| GSA Advantage catalog + price list links | ❌ | ✅ |
| Government POC (name, phone, email) | ❌ | ✅ |
| State + set-aside filters | ❌ | ✅ |
| Website-crawled extra emails / phones / socials | ❌ | ✅ opt-in |
| Lead score (0–100) | ❌ | ✅ |
| Monitor mode (only new contractors) | ❌ | ✅ |

### Use cases

- **B2B lead generation** — GSA Schedule holders are funded, vetted federal sellers who buy software, subcontracting, staffing, compliance, insurance, financing and marketing. Filter by category, state and set-aside, then reach them directly with `email`, `phone` and `website`.
- **Government market research** — map every contractor under a SIN, see which schedules and categories they hold, and size up the competition before bidding.
- **Teaming & subcontracting** — find prime contractors and set-aside partners (SDVOSB, WOSB, 8(a), HUBZone) by capability and location for joint bids.
- **Sales prospecting for GovCon vendors** — sell to companies that already do business with the federal government; enrich with SAM UEI to join against [SAM.gov](https://apify.com/scrapesage/sam-gov-scraper) and [USAspending](https://apify.com/scrapesage/usaspending-scraper) award data.
- **Competitive & supply-chain intelligence** — track who wins new GSA contracts in your category over time with monitor mode.
- **CRM enrichment** — append UEI, NAICS, set-aside status and contract end dates to existing GovCon account lists.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **GSA eLibrary Scraper**, enter a keyword (or a SIN code), optionally set state/set-aside filters, and click **Start**.
3. Watch contractor leads stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchQueries": ["cybersecurity"],
    "states": ["VA", "MD"],
    "socioEconomic": ["serviceDisabledVeteranOwned"],
    "includeContractorDetails": true,
    "enrichContactEmails": false,
    "maxResults": 200
}
````

- **searchQueries** — keywords (e.g. `cybersecurity`, `janitorial`, `office furniture`). The actor finds the matching categories (SINs), pulls the contractors awarded under them, and adds any contractor whose name matches.
- **sins** — exact GSA Special Item Numbers to browse, e.g. `54151S` (IT Professional Services), `561210FAC` (Facilities Maintenance), `518210C` (Cloud). Returns every contractor under each SIN.
- **schedule** *(default `MAS`)* — the GSA Schedule your SINs belong to. Almost everything is under the consolidated Multiple Award Schedule (MAS).
- **contractNumbers** — look up specific contractors. Use `CONTRACT#|Exact Contractor Name` for reliable results.
- **startUrls** — paste GSA eLibrary URLs (contractor, category/SIN, schedule, or search pages) — auto-routed.
- **states** — keep only contractors in these US states (2-letter codes, e.g. `TX`, `VA`, `DC`).
- **socioEconomic** — keep only `smallBusiness`, `womenOwned`, `veteranOwned`, `serviceDisabledVeteranOwned`, `eightA`, `hubZone`, `disadvantaged` or `tribalNativeOwned` firms.
- **includeContractorDetails** *(default true)* — open each contractor's profile for email, website, full address, SAM UEI, NAICS, set-aside certifications, all contracts/SINs/dates, catalog links and the government POC.
- **enrichContactEmails** *(default false)* — crawl each contractor's own website (home + contact/about, max 3 pages) for extra emails, phones and socials.
- **maxResults / maxContractorsPerSin / maxSinsPerQuery** — keep runs bounded (large IT/services SINs list thousands).
- **deduplicateContractors** *(default true)* — output each contractor once, even across multiple SINs/searches.
- **monitorMode** *(default false)* + **monitorKey** — remember contractors from past runs and output only NEW ones.

### Output

One record per contractor (`type: "contractor"`):

```json
{
    "type": "contractor",
    "contractorName": "1 SOURCE CONSULTING, INC.",
    "primaryContractNumber": "47QTCA19D00AQ",
    "contractNumbers": ["47QTCA19D00AQ", "47QRCA24DV172"],
    "phone": "(202) 856-3899",
    "email": "kimberly.logan@go-bti.com",
    "website": "https://go-bti.com/",
    "street": "9500 MEDICAL CENTER DR STE 340",
    "city": "UPPER MARLBORO",
    "state": "MD",
    "zip": "20774-3727",
    "samUei": "EXEYN7TNGWH7",
    "naics": ["541511"],
    "socioEconomic": [
        "Small Business",
        "Service Disabled Veteran Owned Small Business",
        "SBA Certified Veteran Owned Small Business",
        "SBA Certified Service-Disabled Veteran Owned Small Business",
        "SBA Certified Small Disadvantaged Business"
    ],
    "isSmallBusiness": true,
    "isVeteranOwned": true,
    "isServiceDisabledVeteranOwned": true,
    "is8a": false,
    "isHubZone": false,
    "schedules": ["MAS", "OASIS+VO"],
    "sins": ["54151S", "541611", "OLM"],
    "contracts": [
        {
            "schedule": "MAS",
            "scheduleTitle": "Multiple Award Schedule",
            "contractNumber": "47QTCA19D00AQ",
            "sins": ["54151S", "541611", "OLM"],
            "currentOptionEndDate": "Apr 25, 2029",
            "ultimateEndDate": "Apr 25, 2039",
            "catalogUrl": "https://www.gsaelibrary.gsa.gov/ElibMain/advRedirect.do?contract=47QTCA19D00AQ&sin=54151S&src=elib&app=cat"
        }
    ],
    "currentOptionPeriodEndDate": "Apr 25, 2029",
    "ultimateContractEndDate": "Apr 25, 2039",
    "govtPoc": { "name": "Dat Thai", "phone": "(714) 945-4414", "email": "dat.thai@gsa.gov" },
    "sellsToStateLocal": true,
    "sourceSin": "54151S",
    "sourceQuery": "cybersecurity",
    "leadScore": 92,
    "contractorUrl": "https://www.gsaelibrary.gsa.gov/ElibMain/contractorInfo.do?contractNumber=47QTCA19D00AQ&contractorName=1+SOURCE+CONSULTING%2C+INC.&executeQuery=YES",
    "scrapedAt": "2026-06-19T12:00:00.000Z"
}
```

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with `monitorMode` on to capture newly awarded GSA contractors in your category as they appear.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/gsa-elibrary-scraper').call({
    searchQueries: ['cloud computing'],
    states: ['VA'],
    socioEconomic: ['smallBusiness'],
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} GSA contractor leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new contractor leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored category gets a new contractor.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find service-disabled-veteran-owned cybersecurity contractors in Virginia and list their contacts" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **government & B2B data stack**:

- **[SAM.gov Scraper](https://apify.com/scrapesage/sam-gov-scraper)** — federal contract opportunities & entity contacts.
- **[USAspending Scraper](https://apify.com/scrapesage/usaspending-scraper)** — federal awards, contractors & recipient leads.
- **[US Federal Grants Scraper](https://apify.com/scrapesage/us-federal-grants-scraper)** — Grants.gov, NIH & NSF funding.
- **[FEC Campaign Finance Scraper](https://apify.com/scrapesage/fec-campaign-finance-scraper)** — donors, PACs & lobbying.
- **[US Business Formation Scraper](https://apify.com/scrapesage/us-business-formation-scraper)** — newly registered LLC & company leads.
- **[ImportYeti Scraper](https://apify.com/scrapesage/importyeti-scraper)** — US import records, suppliers & B2B leads.
- **[FMCSA Trucking Scraper](https://apify.com/scrapesage/fmcsa-trucking-scraper)** — motor carriers, authority & leads.
- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** — tax preparers, CPAs & accountant leads.

### Tips

- **Find SIN codes**: search a keyword first — the log lists the matching categories (SINs), which you can then pass to `sins` for full coverage.
- **Large categories**: SINs like `54151S` (IT services) list thousands of contractors. Use `states`, `socioEconomic` and `maxContractorsPerSin` to keep runs targeted and cheap.
- **Set-aside filtering** is most accurate with `includeContractorDetails` on (default) — it reads the spelled-out certifications from each profile.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to get a clean feed of only newly awarded contractors.
- **Cost control**: turn `includeContractorDetails` off for a fast, cheap list (name, contract #, phone, city/state, set-aside codes); turn it on for full leads with email and website.

### FAQ

**What is GSA eLibrary?** It's the U.S. General Services Administration's official online source for GSA and VA Schedule contract information — the catalog of companies pre-approved to sell goods and services to the federal government.

**Where do the emails come from?** GSA eLibrary publishes a contractor contact email on each contractor profile — this actor returns it directly. With `enrichContactEmails` on, it also visits the contractor's own website for additional public contact emails.

**What is a SIN?** A Special Item Number is GSA's category code for a type of product or service (e.g. `54151S` = IT Professional Services). Contractors are awarded one or more SINs; browsing a SIN returns every contractor in that category.

**Can I get only small-business / SDVOSB / 8(a) contractors?** Yes — set `socioEconomic` to the set-aside types you want. Combine with `states` to target a region.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor newly awarded contractors?** Turn on `monitorMode`, then create a [Schedule](https://docs.apify.com/platform/schedules) (e.g. weekly). Each run outputs only contractors not seen before.

**Is scraping GSA eLibrary legal?** GSA eLibrary is public U.S. government data. You are responsible for using the data in compliance with applicable laws and GSA's terms.

**A field is null — why?** Some contractors genuinely don't publish a website, or a profile omits a field. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search GSA eLibrary (e.g. "cybersecurity", "janitorial", "office furniture"). The actor finds the matching categories (SINs) and pulls the contractors awarded under them, plus any contractor whose name matches the keyword.

## `sins` (type: `array`):

Exact GSA Special Item Numbers (SINs) to browse, e.g. "54151S" (IT Professional Services), "561210FAC" (Facilities Maintenance), "518210C" (Cloud). Returns every contractor awarded under each SIN. Find SIN codes on a category page or via a keyword search.

## `schedule` (type: `string`):

The GSA Schedule the SINs belong to. Almost everything lives under the consolidated Multiple Award Schedule (MAS). Only change this for legacy/special programs (e.g. OASIS+, 8ASTARS3).

## `contractNumbers` (type: `array`):

Look up specific contractors by contract number. Best results: use the format "CONTRACT#|Exact Contractor Name" (e.g. "47QTCA19D00AQ|1 SOURCE CONSULTING, INC."). A bare contract number will be resolved via search when possible.

## `startUrls` (type: `array`):

Paste GSA eLibrary URLs directly — contractor pages (contractorInfo.do), category/SIN pages (sinDetails.do), schedule pages (scheduleSummary.do) or search results (searchResults.do). Auto-routed by type.

## `states` (type: `array`):

Keep only contractors located in these US states/territories (2-letter codes, e.g. TX, CA, VA, DC). Leave empty for all states.

## `socioEconomic` (type: `array`):

Keep only contractors with these set-aside / socio-economic designations. Most accurate with "Include contractor details" on (default).

## `includeContractorDetails` (type: `boolean`):

Open each contractor's profile to add business email, website, full address, SAM UEI, NAICS codes, spelled-out set-aside certifications, every contract with SINs and end dates, GSA Advantage catalog links and the government POC. Turn off for a faster, cheaper list (name, contract #, phone, city/state, set-aside codes only).

## `enrichContactEmails` (type: `boolean`):

Visit each contractor's own website (home + contact/about, max 3 pages) and extract additional contact emails, phone numbers and social profiles. Only runs for contractors that publish a website.

## `maxResults` (type: `integer`):

Maximum number of contractor records to output across the whole run. Defaults to 100. Set 0 for no limit (the run still self-terminates safely before the run timeout — raise the timeout and/or narrow scope with SINs/filters for very large pulls).

## `maxContractorsPerSin` (type: `integer`):

Cap how many contractors to take from each SIN or search query (large IT/services SINs can list thousands).

## `maxSinsPerQuery` (type: `integer`):

For keyword searches, how many of the matching categories (SINs) to expand into contractors.

## `searchType` (type: `string`):

How keyword searches are matched against the GSA catalog.

## `deduplicateContractors` (type: `boolean`):

Output each contractor only once per run, even if they appear under multiple SINs or searches (deduplicated by contract number / SAM UEI).

## `monitorMode` (type: `boolean`):

Remember contractors seen in previous runs and output only NEW ones — a fresh feed of newly awarded GSA Schedule holders. Works alongside Apify Schedules; it does not replace them.

## `monitorKey` (type: `string`):

Namespace for monitor mode memory. Use a distinct key per saved search (e.g. "cyber-tx") so different monitors don't share state.

## `proxyConfiguration` (type: `object`):

Apify Proxy. Datacenter (default) is fast and reliable for GSA eLibrary; the actor automatically rotates sessions and falls back to residential if a request is blocked.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests. Lower it if you hit timeouts.

## Actor input object example

```json
{
  "searchQueries": [
    "cybersecurity",
    "cloud computing"
  ],
  "sins": [
    "54151S",
    "54151HACS"
  ],
  "schedule": "MAS",
  "contractNumbers": [
    "47QTCA19D00AQ|1 SOURCE CONSULTING, INC."
  ],
  "states": [
    "TX",
    "VA"
  ],
  "includeContractorDetails": true,
  "enrichContactEmails": false,
  "maxResults": 200,
  "maxContractorsPerSin": 500,
  "maxSinsPerQuery": 5,
  "searchType": "allWords",
  "deduplicateContractors": true,
  "monitorMode": false,
  "monitorKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 6
}
```

# Actor output Schema

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

All scraped contractor records in the default dataset.

# 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 = {
    "searchQueries": [
        "cybersecurity"
    ],
    "schedule": "MAS",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/gsa-elibrary-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 = {
    "searchQueries": ["cybersecurity"],
    "schedule": "MAS",
    "maxResults": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/gsa-elibrary-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "cybersecurity"
  ],
  "schedule": "MAS",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/gsa-elibrary-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/gsa-elibrary-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GSA eLibrary Scraper - Government Contractors & B2B Leads",
        "description": "Scrape GSA eLibrary Schedule contractors by SIN, category or keyword: name, phone, email, website, address, SAM UEI, NAICS, set-aside status, contracts & a lead score. Filter by state & set-aside type. Monitor mode returns only new contractors. No login, no browser.",
        "version": "1.0",
        "x-build-id": "T5GobCFu3ATutUGnN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~gsa-elibrary-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-gsa-elibrary-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~gsa-elibrary-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-gsa-elibrary-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~gsa-elibrary-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-gsa-elibrary-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search queries (keywords)",
                        "type": "array",
                        "description": "Keywords to search GSA eLibrary (e.g. \"cybersecurity\", \"janitorial\", \"office furniture\"). The actor finds the matching categories (SINs) and pulls the contractors awarded under them, plus any contractor whose name matches the keyword.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sins": {
                        "title": "SINs / category codes",
                        "type": "array",
                        "description": "Exact GSA Special Item Numbers (SINs) to browse, e.g. \"54151S\" (IT Professional Services), \"561210FAC\" (Facilities Maintenance), \"518210C\" (Cloud). Returns every contractor awarded under each SIN. Find SIN codes on a category page or via a keyword search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "schedule": {
                        "title": "Schedule number (for SINs)",
                        "type": "string",
                        "description": "The GSA Schedule the SINs belong to. Almost everything lives under the consolidated Multiple Award Schedule (MAS). Only change this for legacy/special programs (e.g. OASIS+, 8ASTARS3).",
                        "default": "MAS"
                    },
                    "contractNumbers": {
                        "title": "Contract numbers (direct)",
                        "type": "array",
                        "description": "Look up specific contractors by contract number. Best results: use the format \"CONTRACT#|Exact Contractor Name\" (e.g. \"47QTCA19D00AQ|1 SOURCE CONSULTING, INC.\"). A bare contract number will be resolved via search when possible.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste GSA eLibrary URLs directly — contractor pages (contractorInfo.do), category/SIN pages (sinDetails.do), schedule pages (scheduleSummary.do) or search results (searchResults.do). Auto-routed by type.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "states": {
                        "title": "Filter by state",
                        "type": "array",
                        "description": "Keep only contractors located in these US states/territories (2-letter codes, e.g. TX, CA, VA, DC). Leave empty for all states.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "socioEconomic": {
                        "title": "Filter by set-aside / socio-economic type",
                        "type": "array",
                        "description": "Keep only contractors with these set-aside / socio-economic designations. Most accurate with \"Include contractor details\" on (default).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "smallBusiness",
                                "womenOwned",
                                "veteranOwned",
                                "serviceDisabledVeteranOwned",
                                "eightA",
                                "hubZone",
                                "disadvantaged",
                                "tribalNativeOwned"
                            ],
                            "enumTitles": [
                                "Small Business",
                                "Women-Owned",
                                "Veteran-Owned",
                                "Service-Disabled Veteran-Owned (SDVOSB)",
                                "8(a) Firm",
                                "HUBZone",
                                "Small Disadvantaged Business",
                                "Tribal / Native-Owned"
                            ]
                        }
                    },
                    "includeContractorDetails": {
                        "title": "Include contractor details",
                        "type": "boolean",
                        "description": "Open each contractor's profile to add business email, website, full address, SAM UEI, NAICS codes, spelled-out set-aside certifications, every contract with SINs and end dates, GSA Advantage catalog links and the government POC. Turn off for a faster, cheaper list (name, contract #, phone, city/state, set-aside codes only).",
                        "default": true
                    },
                    "enrichContactEmails": {
                        "title": "Enrich contacts from contractor website",
                        "type": "boolean",
                        "description": "Visit each contractor's own website (home + contact/about, max 3 pages) and extract additional contact emails, phone numbers and social profiles. Only runs for contractors that publish a website.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of contractor records to output across the whole run. Defaults to 100. Set 0 for no limit (the run still self-terminates safely before the run timeout — raise the timeout and/or narrow scope with SINs/filters for very large pulls).",
                        "default": 100
                    },
                    "maxContractorsPerSin": {
                        "title": "Max contractors per SIN/query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap how many contractors to take from each SIN or search query (large IT/services SINs can list thousands).",
                        "default": 500
                    },
                    "maxSinsPerQuery": {
                        "title": "Max SINs per keyword query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "For keyword searches, how many of the matching categories (SINs) to expand into contractors.",
                        "default": 5
                    },
                    "searchType": {
                        "title": "Keyword match type",
                        "enum": [
                            "allWords",
                            "anyWords",
                            "exactPhrase"
                        ],
                        "type": "string",
                        "description": "How keyword searches are matched against the GSA catalog.",
                        "default": "allWords"
                    },
                    "deduplicateContractors": {
                        "title": "Deduplicate contractors",
                        "type": "boolean",
                        "description": "Output each contractor only once per run, even if they appear under multiple SINs or searches (deduplicated by contract number / SAM UEI).",
                        "default": true
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new contractors)",
                        "type": "boolean",
                        "description": "Remember contractors seen in previous runs and output only NEW ones — a fresh feed of newly awarded GSA Schedule holders. Works alongside Apify Schedules; it does not replace them.",
                        "default": false
                    },
                    "monitorKey": {
                        "title": "Monitor key",
                        "type": "string",
                        "description": "Namespace for monitor mode memory. Use a distinct key per saved search (e.g. \"cyber-tx\") so different monitors don't share state.",
                        "default": "default"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy. Datacenter (default) is fast and reliable for GSA eLibrary; the actor automatically rotates sessions and falls back to residential if a request is blocked.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum parallel requests. Lower it if you hit timeouts.",
                        "default": 6
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
