GSA eLibrary Contractor Scraper
parseforge/gsa-elibrary-scraper
AutomationOtherLead generation
Scrape GSA eLibrary contractor listings by category or custom URL. Returns contractor name, SINs, business size, and contact info. Optional detail mode for full profiles.
- Total users
- 23
- Monthly active
- 2
- Total runs
- 2.6K
- Bookmarked
- 4
- Rating
- 5.0 (3)
- Last modified
- 9 days ago
Overview
GSA eLibrary Contractor Scraper
Scrape GSA eLibrary contractor data from any category or search URL, up to a million contractors per run. Every contractor comes with its SIN details, business info, and computed signals. No login or API key. Export to CSV, JSON, Excel, or XML.
The GSA eLibrary is the official directory of contractors holding GSA Schedule contracts, but browsing it manually is slow and you can't export the data. This Actor reads the public contractor listings directly, filtered by category or custom search, and returns each match in one fixed schema.
| Who uses it | What they scrape GSA eLibrary for |
|---|---|
| Government procurement officers | Find qualified contractors for a specific SIN or service area |
| Contracting specialists | Build a competitive landscape of GSA Schedule holders |
| Market researchers | Analyze which contractors serve which categories and regions |
| Small business liaisons | Identify potential partners or subcontractors in the GSA system |
What it does
This Actor collects GSA eLibrary contractors by predefined category or direct URL, and returns each one as a flat row with listing and optional detail page data.
- ๐ Listing-only mode: Fast extraction of contractor name, SINs, and contact info from search result pages.
- ๐ Detail mode: Visits each contractor's profile page for full business details, certifications, and past performance.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with GSA eLibrary data
๐ Build a qualified contractor list.
A procurement officer selects the SIN for IT services and runs the Actor to get every approved contractor with contact details, ready for market research.
๐ Analyze competition in a category.
A contracting specialist scrapes all contractors under a specific NAICS code to see who holds which SINs and identify gaps in the market.
๐ Track small business participation.
A small business liaison runs the Actor across all categories and filters for 8(a) or HUBZone firms to build a partner pipeline.
๐ Monitor GSA Schedule changes.
A market researcher runs the Actor weekly on a set of categories to detect new contractors or dropped SINs over time.
Why choose this scraper
| What you get | |
|---|---|
| Contractor name | The legal business name as registered with GSA |
| SINs held | All Special Item Numbers the contractor is approved for |
| Business size | Small business, 8(a), HUBZone, SDVOSB, WOSB status |
| Contact info | Phone, email, and address from the listing |
| Detail page data | Full business description, certifications, and past performance when detail mode is on |
How it compares
No other Store actor targets GSA eLibrary the same way, so the honest comparison is with the alternatives teams actually weigh.
| GSA eLibrary Contractor Scraper | Build it in-house | By hand | |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When GSA eLibrary 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 predefined categories or a custom GSA eLibrary URL, and the scraper reads each listing page so only matching contractors reach your dataset. The Input tab lists every parameter.
A first run with the defaults:
{
"category": [
"all"
],
"maxItems": 1,
"includeDetails": false
}
A larger pull:
{
"category": [
"all"
],
"maxItems": 200,
"includeDetails": false
}
Pricing
Pay-per-result: $0.039 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $3.90 |
| 1,000 results | $39.00 |
| 10,000 results | $390.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 to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the GSA eLibrary Contractor Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to GSA eLibrary through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/gsa-elibrary-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check that you selected a valid category or pasted a correct GSA eLibrary URL. Some categories may have zero contractors. Try a broader category like 'All Categories'.
The run is taking too long.
Reduce the maximum contractors limit or disable detail mode. Detail mode visits each contractor's profile page and is significantly slower.
I see duplicate contractors.
Contractors may appear under multiple SINs. The Actor deduplicates by contractor name, but if you scrape multiple categories separately you may see repeats.
The data seems incomplete.
Enable detail mode to get the full contractor profile. Listing mode only shows basic info from the search results page.
Can I scrape a specific search query?
Yes. Use the startUrl field and paste the full URL from a GSA eLibrary search results page. This overrides the category selection.
FAQ
| Question | Answer |
|---|---|
| What is GSA eLibrary? | GSA eLibrary is the official online directory of contractors who hold GSA Schedule contracts. It lists their approved Special Item Numbers (SINs), business size, and contact information. |
| Do I need a GSA login or API key? | No. This Actor scrapes the public-facing GSA eLibrary website. No authentication is required. |
| What data can I get from listing pages? | Listing pages show the contractor name, SINs held, business size (small, 8(a), HUBZone, etc.), and basic contact info like phone and address. |
| What data comes from detail pages? | When you enable detail mode, the Actor visits each contractor's profile page and extracts the full business description, certifications, past performance, and additional contact details. |
| How many contractors can I scrape per run? | You can set a maximum up to 1,000,000 contractors. The actual number depends on how many match your category or URL. |
| Can I scrape by NAICS code or SIN? | Yes. Use the predefined categories which map to specific SINs and NAICS codes, or paste a custom search URL from the GSA eLibrary site. |
| What is the difference between listing and detail mode? | Listing mode is faster and only extracts data from search result pages. Detail mode is slower but gives you the full contractor profile. |
| Can I export the data to Excel? | Yes. The Actor outputs structured data that you can download as CSV, JSON, Excel, or XML from the Apify dataset. |
| Is this legal? | Yes. The GSA eLibrary is a public government website. This Actor reads publicly available data at a reasonable rate. |
| What categories are available? | The Actor includes hundreds of predefined categories covering all GSA Schedule SINs, from IT services to facilities management to professional services. |
Related actors
Browse the full ParseForge collection 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. General Services Administration. 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.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| startUrl | string | GSA eLibrary URL to start scraping from. Use this for custom searches or specific URLs. Supports search results URLs (searchResults.do), SIN details URLs (sinDetails.do), or contractor list URLs (contractorList.do). IMPORTANT: You must choose EITHER startUrl OR category, not both. These options are mutually exclusive. | not set |
| category | array | Select one or more predefined categories to scrape contractors from specific service areas. Choose 'All Categories' to scrape from all predefined categories. This will automatically generate the appropriate GSA eLibrary URLs for easy category-based scraping. IMPORTANT: You must choose EITHER category OR startUrl, not both. These options are mutually exclusive. | ["all"] |
| maxItems | integer | How many contractors to collect per run. | 1 |
| includeDetails | boolean | When false (default): Only extracts data from listing pages (faster, less detailed). When true: Visits each contractor's detail page to get comprehensive information (slower, more detailed). See README for details on what data is available from listing vs detail pages. | false |
Pricing
from $13.00 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Actor Start | Flat fee for starting an Actor run. | $0.0052 to $0.0091 |
| Result | Each listing written to the dataset | $0.013 to $0.039 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~gsa-elibrary-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
Rated 5.0 out of 5 across 3 reviews. Read them on Apify.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
