GSA eLibrary Contractor Scraper
Pricing
Pay per event
GSA eLibrary Contractor Scraper
Extract GSA eLibrary contractor profiles with contract numbers, schedules, SINs, SAM UEI, contacts, websites, and addresses.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract GSA eLibrary contractor profiles by keyword or URL.
Use this actor to build GovCon lead lists, enrich SAM.gov workflows, monitor schedule-holder markets, and export contractor contact data from public GSA eLibrary pages.
What does GSA eLibrary Contractor Scraper do?
GSA eLibrary Contractor Scraper searches the public GSA eLibrary contractor directory and saves structured contractor records.
It can start from keywords such as cybersecurity, cloud computing, or janitorial, or from direct GSA eLibrary search and contractor URLs.
For each contractor it can collect contract numbers, schedule information, SINs, address, phone, email, website, SAM UEI, NAICS, socioeconomic categories, contract dates, and source URLs.
Who is it for?
- ๐งโ๐ผ GovCon business development teams building subcontractor and partner lists.
- ๐ Procurement analysts mapping GSA schedule holder markets.
- ๐งพ Capture managers researching competitors by service keyword or SIN.
- ๐ง Lead generation agencies enriching government contractor databases.
- ๐ RevOps teams scheduling repeat contractor refreshes in Apify.
Why use it?
GSA eLibrary pages are public but hard to export at scale.
This actor turns those pages into clean JSON, CSV, Excel, API, webhook, and integration-ready datasets.
You can run it once for quick research or schedule it to monitor contractor markets over time.
How it works
- Provide one or more search keywords or GSA eLibrary URLs.
- The actor requests public
searchResults.dopages. - It parses contractor detail links.
- If detail enrichment is enabled, it fetches
contractorInfo.dopages. - It saves one dataset row per contractor.
Input options
| Field | Type | Description |
|---|---|---|
searchTexts | string[] | Keywords to search in GSA eLibrary. |
startUrls | URL[] | Direct GSA eLibrary search or contractor URLs. |
maxItems | number | Maximum contractor records to save. |
enrichDetails | boolean | Fetch contractor profile pages for contacts and SINs. |
requestDelayMs | number | Polite delay between detail requests. |
Example input
{"searchTexts": ["cybersecurity"],"maxItems": 25,"enrichDetails": true,"requestDelayMs": 250}
Output data
| Field | Description |
|---|---|
query | Search keyword that produced the record. |
contractorName | Contractor name from GSA eLibrary. |
contractNumber | GSA contract number. |
schedule | Schedule code such as MAS. |
scheduleTitle | Schedule title when available. |
sin | Comma-separated SIN list. |
sinTitles | SIN descriptions. |
address | Contractor address. |
phone | Contractor phone. |
email | Contractor email. |
website | Contractor website. |
samUei | SAM Unique Entity ID. |
naics | NAICS code. |
socioEconomic | Socioeconomic designations. |
currentOptionPeriodEndDate | Current option period end date. |
ultimateContractEndDate | Ultimate contract end date. |
governmentPocEmail | Government POC email when shown. |
termsAndConditionsUrl | Price list / terms URL when shown. |
detailUrl | GSA eLibrary contractor profile URL. |
sourceUrl | Search URL or source URL. |
scrapedAt | ISO timestamp. |
Example output
{"query": "cybersecurity","contractorName": "ADVANCED CYBERSECURITY EXPERTS LLC","contractNumber": "47QTCA24D0082","schedule": "MAS","sin": "518210C, 54151HACS, 54151S, OLM","address": "309 BRIARWOOD DR, LEANDER, TX 78641-8077","phone": "254-458-0014","email": "matt@example.com","samUei": "J866DLWCTSG8","detailUrl": "https://www.gsaelibrary.gsa.gov/ElibMain/contractorInfo.do?...","scrapedAt": "2026-06-24T04:08:14.321Z"}
How much does it cost to scrape GSA eLibrary contractors?
This actor uses pay-per-event pricing.
You pay a small start fee plus a per-contractor record fee.
Use maxItems to control cost during testing.
Start with 10โ25 contractors, inspect the dataset, then scale up.
Search tips
- Use procurement nouns such as
cybersecurity,cloud,logistics,janitorial,construction, orIT services. - Use exact product or service phrases when researching a narrow market.
- Keep
enrichDetailsenabled when you need contacts, SINs, SAM UEI, and NAICS. - Increase
requestDelayMsfor very large runs. - Use direct GSA eLibrary URLs when you already have a filtered search page.
Integrations
Send contractor records to:
- Google Sheets for quick lead review.
- Airtable for GovCon pipeline tracking.
- Salesforce or HubSpot through Apify integrations.
- Snowflake, BigQuery, or S3 for procurement intelligence.
- Webhooks for automated enrichment workflows.
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/gsa-elibrary-contractor-scraper').call({searchTexts: ['cybersecurity'],maxItems: 25,enrichDetails: true});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/gsa-elibrary-contractor-scraper').call(run_input={'searchTexts': ['cybersecurity'],'maxItems': 25,'enrichDetails': True,})print(run['defaultDatasetId'])
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~gsa-elibrary-contractor-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTexts":["cybersecurity"],"maxItems":25,"enrichDetails":true}'
MCP usage
Use the Apify MCP server with Claude Code or Claude Desktop.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/gsa-elibrary-contractor-scraper
Claude Code setup:
$claude mcp add apify-gsa-elibrary https://mcp.apify.com/?tools=automation-lab/gsa-elibrary-contractor-scraper
Claude Desktop JSON config:
{"mcpServers": {"apify-gsa-elibrary": {"url": "https://mcp.apify.com/?tools=automation-lab/gsa-elibrary-contractor-scraper"}}}
Example prompts:
- "Find 50 GSA eLibrary cybersecurity contractors and summarize the top SINs."
- "Scrape cloud computing schedule holders and export contractor emails."
- "Monitor GSA eLibrary logistics contractors weekly and alert me about new records."
Scheduling
Create an Apify schedule to refresh a keyword every week or month.
For repeat market monitoring, use stable inputs and compare dataset exports over time.
Data quality notes
The actor extracts data as published by GSA eLibrary.
Some contractors may omit websites, emails, or optional metadata.
Use detailUrl to verify any record in the public source.
Legality
This actor reads public GSA eLibrary pages.
You are responsible for using the data lawfully, respecting applicable terms, and complying with privacy, procurement, and outreach rules.
Do not use extracted contacts for unlawful spam or prohibited solicitation.
FAQ
Can I scrape by SIN?
Use a GSA eLibrary URL that already reflects your SIN/category filtering, or search by a SIN-related service keyword.
Does it require a GSA account?
No. The actor reads public GSA eLibrary search and contractor detail pages.
Troubleshooting
Why did I get fewer contractors than expected?
The keyword may only show a small set of contractor links on the public result page. Try a broader keyword or direct filtered GSA eLibrary URL.
Why are some contact fields missing?
GSA eLibrary pages do not always publish every optional field. The actor leaves unavailable values empty rather than inventing data.
Should I disable detail enrichment?
Disable it only when you need fast search-level records. Keep it enabled for address, email, website, SAM UEI, NAICS, and SIN enrichment.
Related scrapers
- https://apify.com/automation-lab/samgov-government-contracts-scraper
- https://apify.com/automation-lab/government-contracts-multi-source-monitor
Changelog
- Initial version: keyword and URL-based GSA eLibrary contractor extraction with detail enrichment.
Support
Open an Apify issue if a GSA eLibrary page changes or if you need additional fields from the public contractor profile.