TED, SAM.gov & Grants Bid Alerts Scraper
Pricing
from $0.50 / 1,000 results
TED, SAM.gov & Grants Bid Alerts Scraper
Start with a TED-only quickstart, then scrape TED tenders, SAM.gov opportunities, and grants notices into one public-sector bid-alert dataset with deadlines, buyers, values, award watch, rebid watch signals, and webhook-ready summaries.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
太郎 山田
Actor stats
0
Bookmarked
9
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape TED tenders, SAM.gov opportunities, and Grants.gov notices into one public-sector bid-alert dataset. Each run returns buyer names, deadlines, estimated values, signal tags, recommended actions, award-watch hints, rebid signals, and explicit warnings when a source is missing a key or degraded.
Store Quickstart
- Start with
jurisdictions: "eu"for a TED-only bid-alert run that requires no external key. - Use
keywords,cpvCodes,daysAhead, andminValueto keep the first dataset focused. - Add
jurisdictions: "us"when you have a SAM.gov API key. - Add
jurisdictions: "grants"for Grants.gov funding notices and deadline/status alerts. - Set
delivery: "webhook"only after the dataset shape is trusted.
Runtime: Node.js 20+. Use dryRun: true to validate inputs without dataset writes or webhook delivery.
Second-pillar upsell ladder
Start with the TED-only quickstart. Add SAM.gov, grants, award watch, rebid watch, and webhook routing only when the initial bid-alert queue is useful enough to justify broader coverage.
What You Get
A normal run returns:
meta.executiveSummary- current queue size, top buyers, review urgency, and source mix.notices[]- one normalized tender or grant row per opportunity.alerts[]- deadline, status, closing-soon, award-watch, or rebid events when enabled.warnings[]/errors[]- missing API keys, skipped sources, throttling, or degraded upstream responses.
Key Features
- 📋 Summary-first procurement queue — Executive summary, top opportunities, top buyers, and next actions before raw notice scrolling
- 🇪🇺🇺🇸🎯 Multi-source public-sector coverage — TED first, then SAM.gov and Simpler.Grants.gov when the starter lane proves useful
- 🚨 Bid-alert prioritization — Deadline pressure, value, award/rebid phrasing, and watch-term hits roll into the review queue
- 🔁 Recurring watch workflows — Award watch, rebid watch, grants deadline/status deltas, and buyer/incumbent monitoring
- ⚠️ Honest degraded behavior — Missing keys, throttled sources, and zero-result lanes show up as warnings instead of fake completeness
- 📡 Dataset or webhook delivery — Keep validation low-friction with dataset output, then route action-needed rows downstream
Use Cases
| Who | Why |
|---|---|
| Business development teams | Turn TED and federal opportunity noise into one shortlist of current bids worth opening today |
| Capture / bid managers | Spot deadline pressure, strategic-value tenders, award-watch rows, and rebid hints in one queue |
| Public-sector consultants | Keep a reusable buyer/framework watchlist without maintaining source-specific scrapers |
| RevOps / automation teams | Push recurring procurement summaries into CRM, Slack, webhook routers, or internal dashboards |
| Grants teams | Add closing-soon and status-delta alerts once the TED starter lane is already useful |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| jurisdictions | string | "eu" | Keep eu for the first success path. Add grants next, then us once you have a SAM.gov key. |
| keywords | string | "cloud,cybersecurity,IT services" | Starter search terms for TED titles and future SAM/grants expansion. Keep them narrow enough that the first queue feels reviewable. |
| watchTerms | string | — | Add after the first useful run to highlight buyers, incumbents, frameworks, or competitor names. |
| cpvCodes | string | "72000000,72220000" | Starter TED filter for software / IT services. |
| naicsCodes | string | "541512,541519" | Optional SAM.gov filter for the US federal expansion lane. |
| minValue | number | 100000 | Hide lower-value notices when an estimate exists so the starter queue stays commercially relevant. |
| daysAhead | integer | 21 | Keep the first run focused on near-term deadlines. |
| maxItemsPerSource | integer | 40 | Tighter first-run cap so proof stays cheap and reviewable. |
| delivery | string | "dataset" | Start with dataset. Move to webhook after the queue and downstream schema are validated. |
| includeAwarded | boolean | false | Leave off for starter/open-opportunity runs. Enable once award watch or rebid monitoring matters. |
Input Example
{"jurisdictions": "eu","keywords": "cloud,cybersecurity,IT services","cpvCodes": "72000000,72220000","daysAhead": 21,"maxItemsPerSource": 40,"minValue": 100000,"delivery": "dataset"}
Input Examples
Example: Federal IT services in Q3
{"sources": ["sam.gov"],"query": "IT services","postedAfter": "2026-07-01","noticeType": ["Solicitation","Combined Synopsis/Solicitation"],"maxResults": 50}
Example: EU TED contract awards
{"sources": ["ted-eu"],"query": "construction services","noticeType": ["Contract award notice"],"minValueEur": 1000000,"maxResults": 50}
Example: Grants.gov small-business RFPs
{"sources": ["grants-gov"],"categories": ["Health","Education"],"setAside": "Small Business","maxResults": 50}
Output
The actor returns a summary-first payload with four top-level surfaces:
| Field | Type | Why it matters |
|---|---|---|
meta.executiveSummary | object | Tells you whether the run is stable, watch, or action_needed, plus top buyers, top opportunities, and next actions |
meta.warnings | array | Makes skipped, partial, throttled, or degraded source conditions explicit |
meta.upgradeGuidance | object | Preserves the TED-first lane and only nudges toward SAM, grants, recurring delivery, or adjacent workflows when signals are meaningful |
notices | array | Normalized tender / grant rows with daysUntilDeadline, estimatedValue, signalTags, lanePriority, and recommendedAction |
alerts | array | Recurring delta events such as deadline_changed, status_changed, or closing_soon |
PPE compatibility map
The PPE names are compatibility labels for the existing public payload; they do not replace the stable JSON keys buyers already consume. Dataset delivery attaches the opportunity_record event name to each notices[] row through Actor.pushData(row, "opportunity_record"); procurement_summary and alert_event remain additive compatibility surfaces under meta and alerts[].
| PPE concept | Stable output surface | Compatibility note |
|---|---|---|
procurement_summary | meta.executiveSummary, with upgrade context in meta.upgradeGuidance | Summary fields stay under meta so existing dataset consumers keep working. |
opportunity_record | each row in notices[] | Normalized TED / SAM.gov / grants rows keep source, noticeId, title, buyer, deadlineAt, estimatedValue, signalTags, lanePriority, and recommendedAction. |
alert_event | each row in alerts[] plus per-notice alertEvents for grants deltas | Recurring grants deadline/status/closing-soon events remain additive; empty starter runs still return alerts: []. |
Compatibility guardrail: the actor continues to return top-level meta, errors, notices, and alerts. It does not emit top-level procurement_summary, opportunity_record, or alert_event aliases, so current integrations are not forced through a rename.
Output Example
{"meta": {"generatedAt": "2026-04-23T11:48:39.536Z","now": "2026-04-23T11:48:37.305Z","warnings": [],"executiveSummary": {"overallStatus": "action_needed","brief": "Tracked 40 tender / grant notice(s) this run. 1 notice(s) need same-day bid review. Source mix: 40 TED.","recommendedCadence": "daily","trackedNoticeCount": 40,"immediateReviewCount": 1,"strategicValueCount": 14,"sourceMix": {"ted": 40}}},"notices": [{"source": "ted","noticeId": "c97dfecb-0cf9-4ba7-800d-685dbd87bbda","title": "Sweden – IT services: consulting, software development, Internet and support – Upphandling - IT-konsulttjänster ramavtal","buyer": "Transportstyrelsen","deadlineAt": "2026-04-23T22:00:00.000Z","estimatedValue": 736000000,"urgencyLevel": "critical","signalTags": ["urgent_deadline","strategic_value"],"lanePriority": "now","recommendedAction": "Triage before the deadline"}],"alerts": []}
The fuller starter payload is in sample-output.example.json.
Proof buyers can inspect
| Buyer question | Proof asset | What it proves |
|---|---|---|
| "Will the cheapest first run already surface useful work?" | store-input.example.json + sample-output.example.json | The starter lane is real: 40 TED notices, 1 same-day review, and 14 strategic-value rows from the exact quickstart input |
| "Does the recurring production surface actually work live?" | live-proof.example.json | Current canary and contract checks passed on the live task surface, with a sanitized sample from a 117-result recurring run |
| "Will missing paid sources be hidden?" | warnings[], errors[], and meta.upgradeGuidance in the payload | No — skipped, partial, throttled, or degraded source conditions are surfaced explicitly instead of being treated as complete coverage |
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~procurement-intel-actor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "jurisdictions": "eu", "keywords": "cloud,cybersecurity,IT services", "cpvCodes": "72000000,72220000", "daysAhead": 21, "maxItemsPerSource": 40, "minValue": 100000, "delivery": "dataset" }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/procurement-intel-actor").call(run_input={"jurisdictions": "eu","keywords": "cloud,cybersecurity,IT services","cpvCodes": "72000000,72220000","daysAhead": 21,"maxItemsPerSource": 40,"minValue": 100000,"delivery": "dataset"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/procurement-intel-actor').call({"jurisdictions": "eu","keywords": "cloud,cybersecurity,IT services","cpvCodes": "72000000,72220000","daysAhead": 21,"maxItemsPerSource": 40,"minValue": 100000,"delivery": "dataset"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Start TED-only before you add SAM.gov or grants. That is the lowest-support path and the best first proof.
- SAM.gov and grants are additive, not required. If a source is skipped, throttled, or returns zero rows, the actor keeps the run honest through
warnings/errors. - Watch terms work best after the starter lane already produces useful buyers or frameworks. Otherwise they add noise before they add insight.
- Grants deadline/status alerts rely on saved state, so recurring runs matter more than one-off tests.
- Use dataset delivery first. Promote to webhook only after you trust the row shape and internal routing schema.
FAQ
What is the best first run?
Use store-input.example.json unchanged: TED-only, dataset delivery, no SAM.gov key, and a tight 21-day window.
What happens if SAM.gov or grants are unavailable?
The actor does not pretend coverage is complete. It returns the useful sources it could fetch, then surfaces explicit warnings or source errors for the missing lane.
How do I rotate the SAM.gov API key without breaking the scheduled task?
- Reveal the replacement key in your SAM.gov account's Public API Key / Account Details area.
- Rotate it locally and resync the Apify task in one step:
$npm run rotate:sam-key -- SAM-REPLACEMENT-KEY
- Recheck with
npm run canary:checkandnpm run contract:test:live.
When should I enable award watch or rebid watch?
After the starter or recurring TED queue already proves useful. Those workflows are best when you care about incumbent movement, renewals, or follow-on phrasing more than net-new open bids.
How are duplicates handled?
The actor normalizes notices and deduplicates them across comparable identifiers so recurring queues stay cleaner when similar records appear across sources.
Can I schedule recurring bid alerts?
Yes. The current live-proof.example.json comes from the production task / schedule surface, and the actor is designed for daily or weekly recurring runs.
Related Actors
Upgrade into adjacent procurement workflows only when the shortlist proves useful:
- Government Contract Award Monitor — Move here when awarded notices, incumbents, and post-award competitor tracking matter more than open-bid discovery.
- Vendor Pricing, Terms & Renewal Watch API — Add this when shortlisted vendors, subcontractors, or software suppliers need pricing / terms change monitoring ahead of negotiation.
- USPTO Patent Monitor API | JSON + Webhook — Use as optional technical diligence when a buyer wants invention or filing context around a shortlisted vendor or solution area.
Pricing & Cost Control
Pay Per Event:
actor-start: flat fee per run, defined instore-ops/pricing-plan.jsonand the Apify pricing tab.dataset-item: per-output-item event, defined instore-ops/pricing-plan.jsonand the Apify pricing tab.
Apify Store pricing is usage-based, so spend mainly follows how many notices you return and when you expand from the TED-first starter lane into broader source coverage or delivery routing. Check the live Apify pricing tab before publishing customer-facing estimates.
- Keep
jurisdictions="eu",daysAhead=21, andmaxItemsPerSource=40for the cheapest proof path. - Tighten keywords, CPV codes, NAICS filters, or watch terms before you raise the per-source cap.
- Add SAM.gov or grants only when the starter queue is already useful enough to justify a broader source mix.
- Keep
delivery="dataset"until humans trust the row shape; use webhook routing once the queue is stable.
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.
Supplier Enrichment Follow-Up
After finding opportunities, awards, or rebid signals, use Industrial Supplier Intelligence to enrich known supplier websites into procurement-ready profiles with capabilities, certifications, locations, contact pages, confidence, and explicit PPE billing fields.
Use Public Vendor Registry Intelligence when the next step is vendor onboarding evidence: registration portals, supplier requirements, documents, eligibility language, and public contact paths.
Adjacent Public-Data Research
For pharma / biotech / CRO competitive intelligence using a different public-data source, see ClinicalTrials.gov Sponsor Pipeline Scraper — same B2B research / investment / public-data buyer cluster, different data source (NIH ClinicalTrials.gov API v2 with sponsor canonicalization and differential event rows).
Premium Report Pack
Use these premium report actors when a raw dataset is ready to become a buyer-facing audit, watch summary, or agency deliverable. All three keep sourceDatasetId as advanced-only; first runs should use pasted input, URLs, demo mode, and reportTier.
- CSV Local Business List Scoring & SEO Gap Report - Score pasted local business CSV lists and produce agency-ready lead/SEO gap reports.
- SaaS Pricing Page Monitor & Competitor Price Change Alerts - Turn public pricing pages into snapshots, competitor reports, and weekly pricing watch summaries.
- Ad Landing Page Offer Intelligence & CRO Gap Report - Analyze user-provided landing pages and pasted ad copy for offer, CTA, proof, and CRO gaps.
Recommended flow from this actor: run the current extraction/check first, export the useful dataset or copy the relevant URLs, then choose entry, premium, or bundle in the report actor with maxChargeUsd as the safety cap.
RFP / Rebid Report Follow-Up
When an opportunity shortlist needs buyer-facing analysis, use Public RFP Rebid Watch Report. Paste public notice or award text first; keep sourceDatasetId for advanced workflows. Start with snapshot ($9), move to rebid_timing ($29) only when incumbent, recompete, deadline, or award evidence is present. The $79 watch summary remains proof-gated.