Government Tenders Scraper: SAM.gov & TED Europe
Pricing
from $8.00 / 1,000 results
Government Tenders Scraper: SAM.gov & TED Europe
Scrapes US federal contract opportunities (SAM.gov) and EU public procurement notices (TED) into one unified schema. Search by keyword, NAICS or CPV code, or paste portal URLs. Full statements of work as clean Markdown for LLM use, ISO 8601 UTC deadlines, and buyer contact details.
Pricing
from $8.00 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
All-in-One Government Tenders & Procurement Scraper
Scrapes public procurement opportunities from SAM.gov (US federal contract opportunities) and TED — Tenders Electronic Daily (EU public procurement) and returns them in one unified schema.
Search by keyword, by industry code (NAICS for the US, CPV for the EU), or just paste portal URLs — each one is routed to the right portal automatically. Every row comes back with the same 46 fields, whichever side of the Atlantic it came from.
Public data only. No account, no login and no API key required on either portal.
Why one Actor instead of two
The two portals have almost nothing in common mechanically: different ID formats, different industry taxonomies, different date encodings, different ways of expressing what a contract is worth — and TED publishes every title and description in up to 24 languages at once.
They have exactly one thing in common: a public body saying what it intends to buy.
If you sell to governments, you want one table of live tenders. Which jurisdiction an opportunity happens to sit in is not something you chose, and reconciling two ID schemes, two date formats and two industry taxonomies is the genuinely hard part of the job. This Actor does that once, rather than handing you the same problem twice.
Why use this actor
- No account, no login, no API key on either portal
- Full statements of work as clean Markdown — ready to drop straight into an LLM prompt for bid/no-bid triage, requirement extraction or summarisation
- Named procurement officers with real email addresses — the contracting officer and their alternate, not a generic inbox
- Every deadline as a true ISO 8601 UTC timestamp, so US and EU tenders sort correctly against each other in one list
- One identical schema across both portals — no per-source branching in your pipeline
- Attachment listings, set-aside status, place of performance, estimated values and award winners
- Stable JSON output for pipelines, databases and spreadsheets; automatic retries; export to JSON/CSV/Excel
How it works
- You give it keywords, industry codes, or URLs pasted from either portal.
- Each input is routed to the portal that can actually answer it — a NAICS code goes to SAM.gov, a CPV code goes to TED, keywords go to both.
- It pages through every matching notice, then fetches each one in full to pull the complete statement of work, the contacts and the exact dates.
- Every notice is folded into one schema, with descriptions converted to clean Markdown and all dates standardised to UTC.
No scrapers, browsers or blocks to babysit.
What you can search
| Input | Goes to | Example |
|---|---|---|
keywords | Both | ["software development", "cyber security"] |
naicsCodes | SAM.gov | ["541511"] (Custom Computer Programming) |
cpvCodes | TED | ["72000000"] (IT services) |
industryCodes | Split automatically | ["541511", "72000000"] |
noticeTypes | Both, translated | ["solicitation", "award"] |
setAsides | SAM.gov | ["SBA", "8A", "SDVOSBC"] |
pscCodes | SAM.gov | ["7G21", "D302"] |
buyerCountries | TED | ["DEU", "FRA", "POL"] |
placeOfPerformanceStates | SAM.gov | ["VA", "CA"] |
startUrls | Routed by the URL | a search URL, a notice URL, or a bare ID |
Mixed industry codes just work. Put 541511 and 72000000 in one
industryCodes list and the NAICS code is sent to SAM.gov while the CPV code
goes to TED — neither is sent to the portal that cannot read it.
Supported URL and ID forms
| Portal | Search URL | Single notice |
|---|---|---|
| SAM.gov | https://sam.gov/search/?index=opp&naics=541511 | https://sam.gov/opp/<32-char-id>/view |
| TED | https://ted.europa.eu/en/search/result?... | https://ted.europa.eu/en/notice/547033-2026/html |
Bare IDs work too: a 32-character SAM.gov notice ID, or a TED publication number
like 547033-2026. So does the shorthand sam:<id> / ted:<id>.
Input
{"sources": ["sam", "ted"],"keywords": ["software development"],"industryCodes": ["541511", "72000000"],"noticeTypes": ["solicitation"],"activeOnly": true,"publishedWithinDays": 30,"deadlineWithinDays": 45,"includeDescription": true,"includeAttachments": true,"maxItemsPerQuery": 200,"tedLanguage": "eng","tedScope": "ALL","samSort": "-modifiedDate","maxConcurrency": 6,"minRequestInterval": "0.15","proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
| Field | Type | Description |
|---|---|---|
sources | array | Which portals to search: sam, ted, or both. Pasted URLs always go to the portal they name. |
startUrls | array | SAM.gov / TED search or notice URLs, or bare notice IDs. |
keywords | array | Free-text terms, combined with OR. Searched on both portals. |
industryCodes | array | Mixed NAICS and CPV codes; split automatically by shape. |
naicsCodes | array | US industry codes. SAM.gov only. |
cpvCodes | array | EU Common Procurement Vocabulary codes. TED only. |
noticeTypes | array | solicitation, presolicitation, sources-sought, award, special-notice, justification, modification, surplus-sale. Translated into each portal's own codes. |
activeOnly | boolean | Restrict SAM.gov to notices still open. Default true. |
publishedWithinDays | integer | Only notices published in the last N days. 0 disables. |
deadlineWithinDays | integer | Only notices closing within the next N days. 0 disables. |
setAsides | array | US small-business set-aside codes. SAM.gov only. |
pscCodes | array | US Product Service Codes. SAM.gov only. |
organizationIds | array | Restrict to a buying agency. SAM.gov only. |
placeOfPerformanceStates | array | Two-letter US state codes. SAM.gov only. |
placeOfPerformanceCountries | array | Three-letter country codes. SAM.gov only. |
buyerCountries | array | Three-letter country codes of the EU buyer. TED only. |
tedExpertQuery | string | A raw TED expert-search expression, replacing every other TED filter. |
includeDescription | boolean | Fetch full statements of work. Strongly recommended — see Notes. Default true. |
includeAttachments | boolean | Also list solicitation attachments. SAM.gov only. Default false. |
includeRawUpstream | boolean | Attach each portal's original record under rawUpstream. Default false. |
maxItemsPerQuery | integer | Cap per portal per query. 0 means no cap. Default 200. |
tedScope | string | ALL, ACTIVE, or LATEST. |
tedLanguage | string | Preferred language for TED titles and descriptions. |
tedOnlyLatestVersions | boolean | One row per notice rather than every revision. Default true. |
samSort | string | Result ordering for SAM.gov. |
samPageSize | integer | Notices per SAM.gov request. Default 100. |
maxConcurrency | integer | Total simultaneous requests. Default 6. |
minRequestInterval | string | Seconds between request starts. Default 0.15. |
proxyConfiguration | object | Residential proxy recommended. |
Output
Three record types share the dataset, told apart by recordType:
TENDER (one per notice), SEARCH_SUMMARY (one per query) and ERROR.
A US tender (SAM.gov)
{"_input": "criteria:SAM.gov","_source": "SAM.gov-api","_scrapedAt": "2026-08-21T20:12:15Z","recordType": "TENDER","tenderId": "ab5de2004b3a4549819300908e5f3ee1","source": "SAM.gov","sourceJurisdiction": "US","title": "Request for Solutions (RFS): Autonomous Coding (AC) and Automated Appeals & Denials Management (ADM)","agency": "DEFENSE HEALTH AGENCY","agencyDepartment": "DEPT OF DEFENSE","agencyPath": ["DEPT OF DEFENSE", "DEFENSE HEALTH AGENCY (DHA)", "DEFENSE HEALTH AGENCY"],"procurementType": "Solicitation","procurementTypeCode": "o","procedureType": null,"contractNature": null,"deadlineDate": "2026-08-28T14:00:00Z","deadlineDateRaw": "2026-08-28T10:00:00-04:00","deadlineDatePrecision": "datetime","deadlineDatesAllLots": [],"deadlineTimeZone": "America/New_York","publishedDate": "2026-08-21T15:19:04Z","lastModifiedDate": "2026-08-21T15:19:04Z","archiveDate": "2026-09-27T00:00:00Z","estimatedValue": null,"estimatedValueCurrency": null,"estimatedValueBasis": null,"url": "https://sam.gov/opp/ab5de2004b3a4549819300908e5f3ee1/view","descriptionMarkdown": "August 21, 2026: Responses to submitted questions are now available in the attached document, 'ACADM Phase 1 QA 082126'.\n\n**Request for Solutions (RFS): Autonomous Coding (AC) and Automated Appeals & Denials Management (ADM)**\n\n**Opportunity Overview**\n\nThe Defense Healthcare Management Systems Modernization (DHMSM) Program Management Office … ","descriptionTruncated": false,"descriptionSource": "detail","industryCodeSystem": "NAICS","industryCodes": ["541511"],"classificationCode": "DA01","setAside": null,"setAsideLabel": null,"solicitationNumber": "HT0038RFSACADM","noticeStatus": "open","isActive": true,"isCanceled": false,"buyerCountry": "USA","placeOfPerformance": {"city": "Rosslyn", "state": "Virginia", "stateCode": "VA","country": "UNITED STATES", "countryCode": "USA", "zip": null},"contacts": [{ "name": "Sharjeel Javaid", "title": null, "email": "sharjeel.j.javaid.civ@health.mil", "phone": null, "fax": null, "type": "primary" },{ "name": "Dominique Brown", "title": null, "email": "dominique.u.brown.civ@health.mil", "phone": null, "fax": null, "type": "secondary" }],"submissionUrl": null,"attachments": [{ "name": "ACADM Phase 1 QA 082126.pdf", "type": "file", "mimeType": ".pdf", "sizeBytes": 217079, "accessLevel": "public", "postedDate": "2026-08-21T15:19:04Z", "url": "https://sam.gov/api/prod/opps/v3/opportunities/resources/files/5aa0ab25da0f424d91318cf10ecfb981/download" }],"awardee": null,"language": "eng"}
An EU tender (TED)
{"_input": "criteria:TED","_source": "TED-api","_scrapedAt": "2026-08-21T20:12:14Z","recordType": "TENDER","tenderId": "506441-2026","source": "TED","sourceJurisdiction": "EU","title": "Zakup in poraba impulzov za telefonsko številko 080 2002 za potrebe Enotnega kontaktnega centra","agency": "MINISTRSTVO ZA NOTRANJE ZADEVE IN JAVNO UPRAVO","agencyDepartment": null,"agencyPath": [],"procurementType": "Contract notice","procurementTypeCode": "cn-standard","procedureType": "Open","contractNature": "Services","deadlineDate": "2026-08-24T09:00:00Z","deadlineDateRaw": "2026-08-24T11:00:00+02:00","deadlineDatePrecision": "datetime","deadlineDatesAllLots": ["2026-08-24T00:00:00Z"],"deadlineTimeZone": null,"publishedDate": "2026-07-22T00:00:00Z","lastModifiedDate": "2026-07-21T00:00:00Z","archiveDate": null,"estimatedValue": null,"estimatedValueCurrency": null,"estimatedValueBasis": null,"url": "https://ted.europa.eu/en/notice/-/detail/506441-2026","descriptionMarkdown": "Zakup in poraba impulzov za telefonsko številko 080 2002 za potrebe Enotnega kontaktnega centra","descriptionTruncated": false,"descriptionSource": "search-row","industryCodeSystem": "CPV","industryCodes": ["64200000"],"classificationCode": "64200000","setAside": null,"setAsideLabel": null,"solicitationNumber": "77d80d06-21c9-4f08-8846-e0da4b6702d4","noticeStatus": "open","isActive": true,"isCanceled": false,"buyerCountry": "SVN","placeOfPerformance": {"city": "Ljubljana", "state": null, "stateCode": null,"country": null, "countryCode": "SVN", "zip": null, "allCountryCodes": ["SVN"]},"contacts": [{ "name": "MINISTRSTVO ZA NOTRANJE ZADEVE IN JAVNO UPRAVO", "title": null, "email": "gp.mnz@gov.si", "phone": "01 428 40 00", "website": "https://www.gov.si/drzavni-organi/ministrstva/ministrstvo-za-notranje-zadeve-in-javno-upravo", "city": "Ljubljana", "country": "SVN", "type": "buyer" }],"submissionUrl": "https://ejn.gov.si/ponudba/pages/aktualno/aktualno_jnc_podrobno.xhtml?zadevaId=77151","attachments": [],"awardee": null,"language": "slv"}
Tender fields
| Field | Type | Description |
|---|---|---|
tenderId | string | SAM.gov notice ID, or TED publication number. |
source | string | SAM.gov or TED. |
sourceJurisdiction | string | US or EU. |
title | string | The procurement title. |
agency | string | The buying entity — the specific office, not just the parent department. |
agencyDepartment | string | Top-level department (SAM.gov). |
agencyPath | array | Full agency hierarchy, department down to buying office. |
procurementType | string | Readable notice type, e.g. Solicitation, Contract notice, Award Notice. |
procurementTypeCode | string | The portal's own code. |
procedureType | string | Open, Restricted, Competitive dialogue… (TED). |
contractNature | string | Works, Services or Supplies (TED). |
deadlineDate | string | Response deadline as ISO 8601 UTC. Multi-lot EU notices report the earliest. |
deadlineDateRaw | string | The deadline as the portal published it, in local time with offset. |
deadlineDatePrecision | string | datetime when a real time was published, date when only a day was, none when no deadline exists. |
deadlineDatesAllLots | array | Every per-lot deadline, for multi-lot EU notices. |
deadlineTimeZone | string | Named timezone, where the portal gives one. |
publishedDate | string | Publication date, ISO 8601 UTC. |
lastModifiedDate | string | Last update, ISO 8601 UTC. |
archiveDate | string | When the notice auto-archives (SAM.gov). |
estimatedValue | number | Contract value where published. |
estimatedValueCurrency | string | ISO currency code. |
estimatedValueBasis | string | Where the number came from — a procedure estimate, an awarded total, or a sum of per-lot estimates. |
url | string | Public link to the notice. |
descriptionMarkdown | string | The full statement of work, as clean Markdown. |
descriptionTruncated | boolean | true only if you disabled full descriptions and the text was clipped. |
descriptionSource | string | Whether the text came from the full notice or the list row. |
industryCodeSystem | string | NAICS or CPV. |
industryCodes | array | Industry codes in that system. |
classificationCode | string | PSC code (US) or main CPV code (EU). |
setAside / setAsideLabel | string | Small-business set-aside code and its full name (US). |
solicitationNumber | string | The buyer's own reference number. |
noticeStatus | string | open, closed, awarded, archived or cancelled — one vocabulary for both portals. |
isActive | boolean | Still accepting responses (deadline-aware). |
isCanceled | boolean | Withdrawn by the buyer. |
buyerCountry | string | Three-letter country code. |
placeOfPerformance | object | Where the work happens: city, state, country, postcode. |
contacts | array | Procurement officers: name, email, phone, role. |
submissionUrl | string | Direct link to the bidding portal, where published. |
attachments | array | Solicitation documents: name, type, size, download link. |
awardee | object | Winner name, unique entity ID, award number and date, on award notices. |
language | string | Language the title and description are in. |
Search summary
One per query, so you always know whether you got everything:
{"recordType": "SEARCH_SUMMARY","source": "SAM.gov","queryLabel": "SAM.gov[keywords=cyber security]","totalMatchingUpstream": 2237,"returnedCount": 3,"pagesFetched": 1,"requestsMade": 4,"filtersApplied": { "keywords": ["cyber security"], "activeOnly": true, "deadlineWithinDays": 45 },"descriptionsFetched": true,"attachmentsFetched": false,"resultWindowCapped": false,"maxItemsPerQuery": 3,"completeness": "capped-by-maxItemsPerQuery","notes": []}
completeness is one of complete, partial, capped-by-maxItemsPerQuery or
capped-by-upstream-window, and filtersApplied shows exactly which filters
actually took effect — so a small result set is never ambiguous.
Notes & limits
- Leave
includeDescriptionon. SAM.gov's result rows carry only the first 250 characters of the statement of work. Turning it off makes runs faster and cheaper, but the descriptions are clipped — and the Actor tells you so, viadescriptionTruncatedon the row and a note on the summary. - SAM.gov returns at most 10,000 notices per query. That is the portal's own
limit, not the Actor's. When a query matches more, the run stops cleanly at
10,000 and sets
resultWindowCapped: truewith the real total intotalMatchingUpstream. Split the query — by industry code, notice type or date window — to reach the rest. TED has no such limit. - A search that names only EU codes will not search SAM.gov (and vice
versa), because the portal cannot filter on the other side's taxonomy and
would otherwise return its entire notice corpus narrowed only by date. You get
an explicit
ERRORrow explaining what to add, instead of thousands of irrelevant rows. - Estimated values are frequently absent on US notices. SAM.gov publishes a value only on award notices; open solicitations have no such field. This is the portal's behaviour, not a gap in extraction.
- TED notices may not be in English. Titles and descriptions are resolved to
your preferred language, then English, then whatever the notice actually has —
a national-only notice keeps its original language rather than coming back
blank. The
languagefield always tells you which you got. - Date-only fields keep their calendar date rather than being shifted by a timezone, so a notice TED published on 22 July reports 22 July.
- Residential proxy is recommended for scheduled runs.