TED, SAM.gov & Grants Bid Alerts Scraper

Start with a TED-only quickstart, then turn TED tenders, SAM.gov opportunities, and grants notices into source-linked bid queues, report bundles, export files, deadlines, award watch, and rebid watch signals. This Actor is a public-sector bid-alert queue — not a podcast search, chart, or reviews tool, and not a website or article HTML extractor.

Source availability and rate limits are reported in warnings[] and errors[]. A partial source response is never presented as complete coverage.

Open TED, SAM.gov & Grants Bid Alerts Scraper on Apify

Public-sector bid alerts, not podcasts or page extraction

Use this page when the job is monitoring official TED, SAM.gov, and Grants.gov / Simpler.Grants.gov notice feeds into one reviewable queue. Use Apple Podcasts Scraper, Apple Podcasts Chart Scraper, or Apple Podcasts Reviews Scraper for storefront shows, ranks, or reviews. Use Website Content Extractor or Article Content Extractor when the input is a list of page URLs to clean.

This Actor Podcast / extractor pages
Intent TED / SAM.gov / Grants bid-alert queue, award watch, rebid signals, deadline and status deltas Show search, chart ranks, review RSS, or HTML article/docs cleanup
Starter lane jurisdictions: "eu" against the TED notices search API — no external key Apple/iTunes endpoints or a urls list
Expansion grants then us (SAM.gov key required for the US lane) Countries, collection IDs, or more URLs
Deliverable Normalized notices, alerts, optional executive report and JSON export Show, rank, review, or page-content rows

Use cases

Watch terms highlight buyers, incumbents, frameworks, or competitor names in summaries and notice signals without changing upstream source queries. Add them after the first useful run.

What is the best first run?

Start TED-only. The published Store quickstart needs no external key:

{
  "jurisdictions": "eu",
  "keywords": "cloud,cybersecurity,IT services",
  "cpvCodes": "72000000,72220000",
  "daysAhead": 21,
  "maxItemsPerSource": 40,
  "minValue": 100000,
  "delivery": "dataset"
}

Run the TED-only quickstart on Apify

What does a run return?

A normal run returns four surfaces:

  1. meta.executiveSummary — current queue size, top buyers, review urgency, source mix, and whether the run is stable, watch, or action_needed.
  2. notices[] — one normalized tender or grant row per opportunity, with source, noticeId, title, buyer, deadlineAt, estimatedValue, signalTags, lanePriority, and a source-derived recommendedAction.
  3. alerts[] — recurring delta events such as deadline_changed, status_changed, or closing_soon, plus award-watch or rebid events when enabled. Empty starter runs still return alerts: [].
  4. warnings[] / errors[] — missing API keys, skipped sources, throttling, or degraded upstream responses.

Dataset delivery attaches the opportunity_record event name to each notices[] row. procurement_summary and alert_event are additive compatibility labels under meta and alerts[]. The actor continues to return top-level meta, errors, notices, and alerts; it does not emit top-level PPE-name aliases.

Published README sample (TED starter shape):

{
  "meta": {
    "generatedAt": "2026-04-23T11:48:39.536Z",
    "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": []
}

That sample is the published README illustration of the starter payload, not a live coverage guarantee.

Report and export path

Use the report/export path only after the narrow TED queue is useful. Opt in to one source-linked executive procurement report and/or one source-linked JSON opportunity export when matched notices or alerts exist. The low-cost queue and high-value report are separate paths; a raw notice row is not a report or export purchase. Set emitRawRows false when the report/export bundle is the only required deliverable.

{
  "jurisdictions": "eu",
  "keywords": "cloud,cybersecurity",
  "cpvCodes": "72000000,72220000",
  "daysAhead": 21,
  "maxItemsPerSource": 40,
  "minValue": 100000,
  "delivery": "dataset",
  "datasetMode": "all",
  "emitRawRows": false,
  "generateReport": true,
  "emitExport": true,
  "maxChargeUsd": 12,
  "dryRun": false
}

An empty result emits zero rows and zero charges, including for report/export mode. maxChargeUsd is checked before any dataset write, so the actor fails closed instead of delivering a partial bundle. Zero means no cap.

Configure a report or export run on Apify

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. If us is present without a SAM.gov key, the actor warns and skips that source instead of failing the whole run. SAM.gov and grants are additive, not required. Official endpoints used by the schema defaults are https://api.ted.europa.eu/v3/notices/search, https://api.sam.gov/opportunities/v2/search, and https://api.simpler.grants.gov/v1/opportunities/search.

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. includeAwarded defaults to false. Turn it on for award watch, incumbent movement, or rebid monitoring.

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. Bid-alert prioritization rolls deadline pressure, value, award/rebid phrasing, and watch-term hits into the review queue.

Can I schedule recurring bid alerts?

Yes. The actor is designed for daily or weekly recurring runs. datasetMode all emits the current matched opportunity queue. changes_only emits only stateful alert rows and writes zero rows when nothing changed. Grants closing-soon and status-delta alerts persist snapshots in a named Apify key-value store (default procurement-intel-grants-state) so deadline and status alerts stay comparable. grantsOpportunityStatuses default is posted,forecasted. grantsAlertClosingSoonDays default is 7.

How is TED, SAM.gov & Grants Bid Alerts Scraper priced?

Billing is pay-per-event. The live Store pricing tab charges $0.008 for one delivered source-linked procurement opportunity or stateful alert row.

The published README also names procurement-summary-report at $5.00 for one matched source-linked executive report and procurement-opportunity-export at $7.00 for one matched source-linked opportunity export bundle. The README says to check the live Apify pricing tab before publishing customer-facing estimates; those two events are listed there as a scheduled pricing change. Unchanged changes_only polls and empty report/export runs emit zero rows and zero charge.

$0.008 per delivered opportunity or alert row

See TED, SAM.gov & Grants Bid Alerts Scraper pricing on Apify

How do dataset, webhook, and dry-run delivery work?

delivery defaults to dataset and writes billed output. Webhook mode first writes and bills the same canonical dataset/value rows through Actor.pushData, verifies chargedCount, then forwards the run payload. Webhook delivery never replaces dataset billing and does not create a free webhook-only path. Downstream webhook failure is treated as a warning without rebilling on retry. dryRun skips dataset writes and webhook delivery side effects while validating inputs. Runtime is Node.js 20+.

Open TED, SAM.gov & Grants Bid Alerts Scraper on Apify

Related pages