Public sector buyers in the UK often announce what they plan to buy before they publish the tender. If you sell to them, the useful list is the one that tells you what is coming, sorted by when. The notices are public, but they sit on separate services with different formats. This post shows a ready-made way to read them as rows with an Apify Actor I publish, and what it costs.
The Actor is UK Tenders Scraper: Contracts Finder & Find a Tender Notices (README heading: UK Public Contracts Lookup), published by Yappman Data: https://apify.com/yappman/contracts-lookup
The example Task is Upcoming UK public tenders: pipeline and planned notices: https://apify.com/yappman/contracts-lookup/examples/upcoming-uk-public-tenders
What the Task does
It runs the Actor in pipeline mode. That returns planning notices, sorted by when the buyer expects to publish its next notice, soonest first. On Find a Tender these are the Procurement Act pipeline, preliminary market engagement and planned procurement notices, plus prior information notices on the older forms. On Contracts Finder it is that service's planning notices. Notices that state no expected date come after the dated ones.
The saved input is:
{
"mode": "pipeline",
"maxItems": 20
}
Run options are the latest build, 512 MB and a 600 second timeout, with a maximum cost per run of $0.15.
I did not save an expected date range in the Task, because a fixed date goes stale. You add your own.
Narrowing it to the months you can bid in
The Task page offers the input fields expectedFrom, expectedTo, cpvCodes, regions and keywords.
-
expectedFromandexpectedTo(YYYY-MM-DD, inclusive) keep notices whose expected date falls in those days, in UK time. Notices that state no expected date are then left out. -
cpvCodestakes prefixes.72matches all of division 72 (IT services); a longer code matches itself and the codes beneath it. -
regionstakes the 12 UK regions plusOutside UK. -
keywordsmatches whole words in the title and description. The description is matched but never returned.
An example for IT work expected between November and January:
{
"mode": "pipeline",
"cpvCodes": ["72"],
"lastDays": 92,
"expectedFrom": "2026-11-01",
"expectedTo": "2027-01-31",
"maxItems": 50
}
lastDays: 92 is the widest publication window.
Open tenders by sector
Pipeline notices are what is coming. If you want what is open for bids now, I also published sector Tasks. They run a search for tender-stage notices from the last 7 days with maxItems 20:
- Open UK construction tenders (last 7 days), CPV division 45: https://apify.com/yappman/contracts-lookup/examples/uk-construction-tenders
- Open UK health and social care tenders (last 7 days), CPV division 85: https://apify.com/yappman/contracts-lookup/examples/uk-health-social-care-tenders
-
IT and software tenders in the last 30 days (CPV 72), a search for tender-stage notices on both services with
maxItems20: https://apify.com/yappman/contracts-lookup/examples/uk-it-and-software-tenders
Because the window is relative ("last 7 days"), a saved Task does not go stale. You can change the CPV codes, add keywords or regions, or switch to alert mode.
What a row holds
One fixed row per notice: source (Find a Tender, Contracts Finder or, if you choose it, Public Contracts Scotland), notice id, title, buyer, value and currency, CPV codes, regions, stage, publication time, deadline and a link to the notice. Pipeline rows also carry noticeType and futureNoticeDate, the date the buyer expects to publish its next notice, as the notice states it.
The rows hold no supplier field and no contact details. Titles have email addresses and UK phone numbers replaced with [redacted]. That works by pattern, so a name written some other way in a title is not caught.
What it costs
Pay per event. A run is $0.005 and each notice returned is $0.005 on the Free plan, falling to $0.003 on Gold and above. A default 20 row run costs up to $0.105. A run refused before anything is read (invalid input, or a window over 92 days) is not charged. A run that reads data and finds nothing still pays the $0.005 run fee.
Use maxItems and Apify's maximum cost per run setting to cap spend.
How long it takes: a default run usually takes a minute or two. Requests to the services' APIs are paced at one every 15 seconds, and a run is capped at 12 of them, so expect minutes, not seconds.
Getting only new notices every morning
Each sector Task can be turned into a daily feed:
- Open the Task and change
modetoalert. - Give it an
alertIdof your choice, for exampleit-tenders, and keep your CPV codes. - Add a schedule in the Console (Schedules, then create one, daily).
- Keep
maxItemsset so a busy day stays capped.
Each run looks at the last 14 days of notices and returns only those not sent to that alertId before. The Actor sends no email or message itself, so use Apify's own notifications or an integration for delivery. State is kept in a key-value store named contracts-alert-<alertId> in your own account. A daily alert returning about 20 new notices costs about $0.105 a run.
Limits
- The expected date is the buyer's estimate as published. It can move or pass without a tender.
- Only notices published inside your publication window are read, so a pipeline notice published four months ago is not found. The window is 31 days by default and 92 at most.
- Both services are read from their daily files over your whole window, with today taken from their APIs. A run is capped at 12 API requests, so if a day's file is missing the run still finishes, and the run summary names the days it did not cover.
- A procurement published on two services is two notices and two charges. A
reconcileKeyon the row helps you join them.
Licence
Contains public sector information licensed under the Open Government Licence v3.0.
This is an independent tool. Not affiliated with or endorsed by the operators of Find a Tender, Contracts Finder or Public Contracts Scotland.
Top comments (0)