Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
RFP & Tender Fit Monitor — Bid/No-Bid Scoring & Alerts icon

RFP & Tender Fit Monitor — Bid/No-Bid Scoring & Alerts

Watch TED, UK Find a Tender and SAM.gov for new tenders. You get a bid/no-bid fit score, deadlines and eligibility flags.

5 from 1 review on Apify 249 runs on Apify $0.03 per fit scored basic ($30 / 1,000)
Run this in the cloudRun on Apify →

Monitors & Alerts

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust sources, keywords, cpvCodes (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.03 per fit scored basic = $30 per 1,000

You are charged forWhenPrice
Fit scored basicFit scored basic$0.03
Digest generatedDigest is generated$0.25
Fit scored AIFit scored AI$0.08
Source checkedThe source was checked$0.01
Tender foundA tender was found$0.003

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-09, and they are what you are actually charged.

Inputs

FieldWhat it doesType
sourcesWhich official procurement feeds to check. Valid values: TED (EU), UK_FTS (UK Find a Tender), SAM_GOV (US). TED and UK_FTS are keyless; SAM_GOV needs a free SAM.gov API key in 'samApiKey', if omitted, that source is skipped with a clear message. Unknown values are ignored.array
keywordsFree-text terms describing the work you do (matched against notice title/description). Used to filter TED/UK and to inform fit scoring.array
cpvCodesCommon Procurement Vocabulary codes to match (e.g. 72000000 = IT services). Filters TED server-side and UK client-side. Leave empty to rely on keywords.array
naicsCodesNorth American Industry Classification codes for SAM.gov (e.g. 541512 = Computer Systems Design). One query per code (max 3 used) to respect SAM.gov rate limits.array
vendorProfileYour firm's profile, this is what each tender is scored AGAINST. capabilities/certifications are arrays of strings; eligibleRegions is country codes (e.g. GB, US, PL) or empty for no region restriction; min/maxContractValue are numbers or null; smallBusiness is true/false.object
generateFitScoreRun the bid/no-bid fit engine on each new tender. This is the product, leave on.boolean
onlyNewSinceLastRunEmit only tenders that are new or changed versus the previous scheduled run (deltas, not dumps). Turn off to re-emit the full current window every run.boolean
lookbackDaysHow far back to fetch each run. The state store dedupes, so a generous window safely catches late-indexed notices.integer
maxResultsPerSourceCap on notices fetched per source per run. Set this comfortably above the number of notices your keyword/CPV filter typically yields in the look-back window, so the full window is captured each run. A cap far below the window's volume can surface a different subset run-to-run (TED has no stable tiebreaker among same-day notices), fine for niche filters, but raise it for very broad ones.integer
weeklyDigestWrite a fit-ranked HTML + Markdown digest to the Key-Value Store (keys DIGEST.html / DIGEST.md), the artifact a bid team reads.boolean
webhookUrlIf set, POST a compact JSON run summary here when the run finishes (e.g. a webhook.site URL, Slack/Make/Zapier inbound hook).string
samApiKeyFree public API key from a personal SAM.gov account (Account Details -> Public API Key). Required only if SAM_GOV is in 'sources'. Stored as a secret.string
fetchSamDescriptionsSAM.gov descriptions require a second API call each and a personal key allows only ~10 calls/day. Leave OFF unless you have a higher-quota key.boolean
stateStoreNameNamed Key-Value Store that holds the monitor's per-source snapshot across scheduled runs (this is what makes onlyNewSinceLastRun work). Leave as default unless you run several independent monitors and want isolated state.string

What you get

A structured dataset — each result includes fields like:

buyerclassificationcountrydeadlinefitidis_changedis_newpublishedrequirements_textsourcesummarytitleurlfit.fit_scorefit.bid_recommendation.decisionvalue.amount

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

4 ready-to-run use cases

TED EU Tenders for IT and Cybersecurity, Fit Scored

CPV 72000000 notices from TED with buyer, country, deadline, value and a fit score against what your team actually does. No key needed for TED.

SAM.gov API Bid Monitor by NAICS Code

New federal solicitations matched on NAICS 541512 and 541511, each scored go or no-go against your vendor profile. Needs a free SAM.gov API key.

Government Tender Alerts for UK Consultancy Work

Management consultancy and PMO notices from Find a Tender, each with buyer, deadline, value and a rules-based fit score against your profile.

UK Find a Tender and TED: Marketing Agency Contracts

Advertising, branding and digital communications notices from both registers, deduped, scored, and posted to your webhook if you paste one in.

Related tools in Monitors & Alerts

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Structured Product Price & Stock Monitor — JSON-LD / Shopify iconE-commerce & Price Tools

Structured Product Price & Stock Monitor — JSON-LD / Shopify

Track product price and stock from a store's own JSON-LD or Shopify data. Restock, price-drop and sale alerts into Slack or Discord. No API key.

4 use cases

Google Reviews Monitor — Multi-Location Alerts & Reports iconMaps & Local Lead Generation

Google Reviews Monitor — Multi-Location Alerts & Reports

Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.

4 use cases

YouTube Channel Monitor — New Upload Tracker iconYouTube & Creator Tools

YouTube Channel Monitor — New Upload Tracker

Watch YouTube channels and get only their new uploads: title, URL, publish date, views, thumbnail. $0.01 per new video.

17 use cases

App Review Triage Monitor — App Store & Google Play Alerts iconApp Store Data

App Review Triage Monitor — App Store & Google Play Alerts

Sort new App Store and Google Play reviews into bugs, billing and feature requests. Get alerts on rating drops in Slack. $0.40 per 1,000 reviews.

4 use cases

SaaS Competitor Monitor: Pricing, Changelog & Positioning iconMonitors & Alerts

SaaS Competitor Monitor: Pricing, Changelog & Positioning

Track a competitor's SaaS pricing, changelog and positioning on a schedule. You get only what changed, sent to Slack. $0.01 per page checked.

4 use cases

See all Monitors & Alerts →

RFP & Tender Fit Monitor: new public tenders, scored bid or no-bid against your firm

Describe what your firm does once, then run this on a schedule. It reads TED (EU), UK Find a Tender and SAM.gov, keeps track of what it has already shown you, and scores each new notice against your capabilities, certifications, regions and contract-value band. Every row carries a bid, maybe or no-bid call with the reason, plus the deadline and how tight it is.

The scoring is a deterministic rules engine, not a model.

InputYour capability profile, plus keywords and CPV or NAICS codes
OutputOne row per new or changed tender, with a bid/no-bid call
Ceiling1,000 notices per source per run
Account neededNone for TED and UK. SAM.gov needs your own free key
Price$0.03 per tender scored, flat on every plan

🎯 What RFP & Tender Fit Monitor does

Each run fetches the look-back window from every source you picked, drops anything it has shown you before, and scores what is left. State lives in a named key-value store on your own account, so the dedupe survives between scheduled runs. Records stay there for 90 days after they were last seen.

The score is weighted: capability match counts most at 0.4, then classification codes at 0.2, then certifications and eligibility at 0.15 each, then contract value at 0.1. A few things force a no-bid on their own regardless of the score, and they are the ones a bid team would check first: the deadline has already passed, the country sits outside your eligible regions, or a mandatory certification is one you do not hold. A bid with a very tight deadline is downgraded to maybe.

fetchSamDescriptions is off for a reason. SAM.gov descriptions need a second API call each and a personal key allows roughly ten calls a day, so leave it off unless you have a higher-quota key.

📥 What you give it

{
  "sources": ["TED", "UK_FTS"],
  "keywords": ["managed IT services", "cybersecurity"],
  "cpvCodes": ["72000000"],
  "vendorProfile": {
    "capabilities": ["managed IT", "cloud migration", "helpdesk"],
    "certifications": ["ISO 27001"],
    "eligibleRegions": ["GB", "IE"],
    "minContractValue": 50000,
    "maxContractValue": 5000000,
    "smallBusiness": true
  },
  "lookbackDays": 7,
  "weeklyDigest": false
}
FieldWhat the run uses if you leave itWhat it is
sourcesTED and UK_FTSTED, UK_FTS, SAM_GOV. The first two need nothing. Unknown values are ignored.
vendorProfilebox starts with an exampleThe thing every tender is scored against. Capabilities and certifications are lists of words, eligibleRegions country codes or empty for anywhere, value bounds numbers or null.
keywordsbox starts with four IT termsWhat you do, in plain words. Filters TED and UK, and feeds the score.
cpvCodesbox starts at 72000000EU and UK procurement codes. TED filters on them at source, UK after the fetch.
naicsCodesbox starts at 541512US codes for SAM.gov. One query per code, first three used.
generateFitScoretrueThe whole point. Leave it on.
onlyNewSinceLastRuntrueEmit deltas rather than the whole window again.
lookbackDays7How far back to fetch, 1 to 365. The store dedupes, so a generous window is safe.
maxResultsPerSource100Cap per source per run, up to 1,000. Set it above what your filter usually returns in the window.
weeklyDigesttrueWrites a fit-ranked digest to the key-value store. It is billed on every run it is on.
webhookUrlemptyPosts a compact run summary when the run finishes. Slack, Make and Zapier hooks all work.
samApiKeynoneYour own free SAM.gov public key, stored as a secret. Only needed for SAM_GOV.
fetchSamDescriptionsfalseCosts a second SAM.gov call per notice.
stateStoreNamerfp-tender-fit-monitor-stateThe named store holding the baseline. Change it only to run several independent monitors.

📤 What you get back

A real row from a recent run, with the long text fields trimmed:

{
  "id": "TED:647141-2026",
  "title": "Germany – Software package and information systems – 31 101: 414",
  "buyer": "Universitätsklinikum Ulm Bereich IV 2 Vergabemanagement und Projekteinkauf Vergabestelle",
  "source": "TED",
  "country": "DEU",
  "classification": ["48000000", "48218000"],
  "value": { "amount": null, "currency": null },
  "published": "2026-09-21",
  "deadline": "2026-10-09",
  "url": "https://ted.europa.eu/en/notice/-/detail/647141-2026",
  "summary": "Der Bereich IV Wirtschaft und Logistik des Universitätsklinikums Ulm beabsichtigt ...",
  "is_new": true,
  "is_changed": false,
  "fit": {
    "fit_score": 68,
    "bid_recommendation": {
      "decision": "bid",
      "reason": "Pursue: good overall alignment with your profile."
    },
    "mandatory_requirements": [],
    "eligibility_flags": [],
    "deadline_risk": {
      "days_left": 18,
      "typical_prep_days": 20,
      "level": "medium",
      "note": "18 day(s) left vs ~20 typically needed ..."
    },
    "score_breakdown": {
      "sub_scores": { "capability": 0.5, "classification": 0.6, "certification": 1, "value": 0.6, "eligibility": 1 },
      "matched_capabilities": [],
      "matched_keywords": []
    },
    "scoring_method": "rules",
    "scoringEngine": "basic"
  }
}
FieldWhat it is
idSource prefix plus the notice number, like TED:647141-2026. Stable, so use it as your key.
fit.fit_score0 to 100. Read it next to the decision, not instead of it.
fit.bid_recommendation.decisionbid, maybe or no-bid, with the reason in plain words.
fit.deadline_riskDays left against a 20-day preparation assumption, and a level of high, medium, low or unknown.
fit.eligibility_flagsWhat would rule you out, such as a certification you do not hold.
value.amountnull on a great many notices, because the buyer did not publish one.
deadlineAlso null more often than you would hope. Check the source page when it is.
summary, titleIn the language the buyer published in, not translated.
is_new, is_changedNew to your baseline, or seen before with changed content.

🧾 Reading the output

Every dataset row is a real tender. There are no sample or diagnostic rows here, so nothing needs filtering out.

Two artifacts land in the run's key-value store:

KeyWhat it is
DIGEST.html and DIGEST.mdThe fit-ranked digest, which is the thing a bid team actually reads. Written when weeklyDigest is on.
RUN_SUMMARYWhich sources answered, how many notices each returned, and the error text for any source that failed. Check this first when a run looks light.

A source that fails does not stop the others and does not fail the run. It shows up in RUN_SUMMARY with its reason, and it is not charged.

▶️ How to run it

1. Open RFP & Tender Fit Monitor and click Try for free. 2. Fill in Your firm: what you can do, what you are certified for, which countries, what size of contract. 3. Put your trade words into Keywords and your CPV or NAICS codes beside them. 4. Turn Generate ranked digest off for a first test, then set Look-back window and Max results per source. 5. Click Start. When it looks right, schedule it and point Webhook URL at your Slack.

💰 How much does it cost?

$0.03 per tender fit-scored. Flat on every Apify plan, no volume tiers. Alongside it:

EventPrice
Tender fit-scored$0.03
Tender found$0.003
Source checked$0.01
Ranked digest written$0.25

The digest is billed on every run it is switched on, including a run that found nothing new. It is on by default, so turn it off for daily runs and leave it on for the weekly one. A tender you have already seen is not scored again and not charged again.

💡 What people use it for

  • A daily sweep with the digest off, so a bid team sees only what is new and only pays for that.
  • A weekly ranked digest that lands in an inbox as an HTML page, already sorted by fit.
  • Filtering a very broad CPV code down to what your certifications actually let you win, using

eligibility_flags.

  • Catching deadline risk early: deadline_risk.level flags the notices that arrived too late to

answer properly.

  • Feeding a CRM through the webhook, keyed on id, so nothing is chased twice.

🚧 What it does not do

  • Three sources, not every portal. TED, UK Find a Tender and SAM.gov.
  • It does not read attached documents. Scoring works on the notice title, summary and codes that

the portal publishes.

  • No translation. A Bulgarian notice is scored and delivered in Bulgarian.
  • value.amount and deadline are often null, because buyers leave them out. The score handles

a missing value rather than guessing one.

  • Changing your vendorProfile does not re-score tenders already in the baseline. To rescore,

turn onlyNewSinceLastRun off for one run, or point stateStoreName at a fresh name.

  • SAM.gov needs your own free key, and a personal key's daily quota is small.
  • A cap well below what your filter returns can surface a different subset each run, because TED

does not order same-day notices predictably. Raise maxResultsPerSource for broad filters.

  • It recommends, it does not decide. The score is a rules engine reading published text.

🧭 Which procurement tool do you need?

If you wantUse
EU, UK and US tenders scored against your firmThis one
US city, county and school-district bidsUS Local Bid Portals Scraper
US company filings and financialsSEC EDGAR Scraper
Contact details for a list of company websitesContact Details Scraper

❓ Questions people ask

Do I need any accounts? Not for TED or UK Find a Tender. SAM.gov needs a free public API key from your own SAM.gov account, and it is stored as a secret.

How does it know what is new? A named key-value store on your account holds the baseline per source. That is what onlyNewSinceLastRun reads, and it keeps records for 90 days after they were last seen.

Can I run two different profiles? Yes. Give each one its own stateStoreName so their baselines stay apart.

Why is my run so cheap some days and not others? You pay per tender scored, and a quiet day in your keywords is a quiet run. The digest is the fixed part, so switch it off when you do not need it.

Is any of the scoring done by AI? No. Every score comes from the rules engine, and that is what the price covers.

Is this legal? These are official public procurement notices, published by TED, the UK government and SAM.gov for exactly this purpose. Buyer contact names can appear in a notice summary and are personal data under GDPR. Apify's write-up on scraping and the law is a sensible starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID, and read RUN_SUMMARY in the run's key-value store first: it names which source failed and why.