UK Public Cleaning & FM Contract Renewal Leads avatar

UK Public Cleaning & FM Contract Renewal Leads

Pricing

$6.00 / 1,000 unique uk cleaning/fm contract records

Go to Apify Store
UK Public Cleaning & FM Contract Renewal Leads

UK Public Cleaning & FM Contract Renewal Leads

Official UK cleaning and FM contract expiry-watch leads from Find a Tender and Contracts Finder OCDS. Buyer, supplier, CPV, dates, GBP values and notice URLs. Expiry is not a confirmed re-tender or supplier switch.

Pricing

$6.00 / 1,000 unique uk cleaning/fm contract records

Rating

0.0

(0)

Developer

AFK Digital

AFK Digital

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

NEWAPI16 · v1.0.0 · Actor: newapi16-uk-cleaning-fm-contract-renewals

Find published end dates of public-sector cleaning and facilities-management (FM) contracts in the United Kingdom. Official Find a Tender and Contracts Finder Open Contracting Data Standard (OCDS) notices are normalized into one row per identifiable contract/award. Results are available in JSON and CSV for Clay, n8n and CRM enrichment.

Important: A contract approaching its stated end date is not a confirmed renewal tender, supplier change, or guaranteed sale. Some source dates are planning estimates. Supplier names are included only when directly linked to awards. Neither contractual expiry nor actual supplier switch is guaranteed by this data.

Quick start

Default scan: cleaning CPV group 90910000 and FM group 79993000; the next 365 days of contractual end dates; the last 60 days of source publication/update activity; up to four pages per source; up to ten unique records; and a $0.06 event spending cap. Small bounded defaults are intended to complete within five minutes.

Example input (Apify Console or API):

{
"cpvCodes": ["90910000", "79993000"],
"region": "",
"contractEndFrom": "2026-10-22",
"contractEndTo": "2027-10-22",
"maxResults": 10,
"maxCostUsd": 0.06,
"lookbackDays": 60,
"maxPagesPerSource": 4,
"pageSize": 100,
"resume": true
}
  • Trailing zeroes in a CPV input are treated as a CPV-family prefix, not exact-equality. For example, 90910000 covers 9091xxxx. Source data must explicitly classify the procurement with CPV; no category is inferred from its title.
  • Dates are inclusive YYYY-MM-DD. When omitted, the range runs from today UTC to today + 365 days.
  • Optional region text matches an official delivery location or the buyer's address (fall-back marked buyer_address_fallback). It is not a certified service-area match.
  • Optional publicationFrom/publicationTo ISO date-times override lookbackDays.
  • This is a bounded published/update history search, not an exhaustive UK contract inventory.

Official APIs and licence

  1. Find a Tender OCDS 1.1.5 release packages: https://www.find-tender.service.gov.uk/api/1.0/ocdsReleasePackages. Stage award, limit at most 100, cursor from links.next. Official documentation: https://www.find-tender.service.gov.uk/apidocumentation/1.0/GET-ocdsReleasePackages. Filter dates are updatedFrom and updatedTo.
  2. Contracts Finder OCDS release packages: https://www.contractsfinder.service.gov.uk/Published/Notices/OCDS/Search. Stages award,implementation; limit at most 100; cursor from links.next. Official documentation: https://www.contractsfinder.service.gov.uk/apidocumentation/Notices/1/GET-Published-Notice-OCDS-Search. Filter dates are publishedFrom and publishedTo.
  3. Both observed release packages declare the Open Government Licence v3.0: http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/. Attribution: Contains public sector information licensed under the Open Government Licence v3.0. Official source URLs and notice IDs are preserved.

The two publication date predicates have different meanings. Older contracts not updated recently will not be found in the default short lookback. Expand lookback, and page caps, for broader historical searches. Do not assume complete nationwide coverage.

Contract relationship and evidence

Output fieldOfficial source mapping
notice_id, ocidOCDS release.id and release.ocid
tender_titlerelease.tender.title
buyer_authorityrelease.buyer.name or referenced buyer party
supplier_namelinked awards[].suppliers[], resolved via parties[], never inferred for planned tenders
contract_start_date, contract_end_datecontracts[].period, if explicitly given; otherwise related awards[].contractPeriod; tender.contractPeriod only for a record without awards or contracts, explicitly flagged planned
contract_value_gbpcontract.value, award.value, or tender.value, only when currency is GBP, with source-specific status
cpv_codesexplicit OCDS tender/item/lot/award/contract CPV classifications
source_notice_urlOfficial original notice link
observed_atDate-time at collection

Evidence columns:

  • date_status: signed_contract_scheduled_end, recorded_contract_period, awarded_period_not_verified, tender_planned. A signed contract may still be extended or changed; dates are scheduled, not legally guaranteed.
  • value_status: recorded_contract_value, awarded_value, estimated_tender_value, unavailable_or_non_gbp.
  • supplier_party_ids, award_id, contract_id, ocid, release_date and contract_key identify related data.
  • region_match_basis: service_location or buyer_address_fallback.
  • renewal_signal is always expiry_watch_only_not_a_confirmed_renewal.
  • No contract end date is ever calculated from a duration, tender date, award date or notice date. A missing contractual end date does not become a result.

Pricing

The intended paid Apify pay-per-event (PPE) event is unique-contract-record at $0.006 per unique output contract. Therefore 1,000 records cost $6.00 in event fees. There is no paid startup event. The Apify account must additionally be configured in Publishing > Monetization and actual Store pricing verified; having event-charge code alone does not activate pricing.

Limits maxResults, maxCostUsd, and the Apify platform maximum charge apply together. In paid mode, one Actor.charge event with an idempotency key is associated with one unique dataset result. There is no billing on raw notice views, duplicate release updates, or unmatched results. Prior to monetization, development/test builds are not paid.

The Actor deduplicates source:OCID:contract or award identity, and conservatively suppresses cross-publisher matches only when buyer, supplier, contract title, start/end dates and value all match. On resumed runs, checkpoint and existing dataset results prevent already emitted contracts being processed twice. Apify charge idempotency keys have a finite time window; an interrupted charge before a successful dataset write may require an operator check. New separate runs have independent billing contexts. To avoid duplicate CRM leads across separate runs, upsert by contract_key/ocid and correlate cross-source identifiers explicitly.

Apify can retain 20% of the Actor's revenue and deduct platform usage from the creator's share (if usage is included); confirm plan-specific and run-specific costs on the real Apify billing page. Downloading stored data after a run may carry storage usage charges.

Resilience and support

  • HTTP timeout: 15 seconds; temporary 429 or 5xx errors: at most three controlled retries with backoff.
  • Enforced HTTPS source-host/path validation for cursor links.
  • Bounded pages and results; source failure recorded in RUN_SUMMARY, preserving partial results; if both fail the run reports failure.
  • Within-run CHECKPOINT stores emitted contract keys, cross-source dedupe fingerprints, source cursor, source index and input hash. Resume is within the same run's storage, not a shared account-level global database.
  • No API keys are required for the public government OCDS endpoints. Credentials are not embedded or logged.

Clay, n8n and CSV / JSON

The Apify default dataset provides row-oriented JSON via the Dataset Items API, and native CSV with the same endpoint using format=csv. The Actor Output schema advertises results, csv, and RUN_SUMMARY locations. In Clay, import CSV or feed the JSON endpoint and use contract_key as the upsert key. In n8n, run the Actor, fetch its dataset, and branch on date_status/value_status before creating a follow-up. Avoid wording that promises a renewal tender or incumbent replacement.

Quality assurance

cd /opt/NEWAPI/NEWAPI16
python3 -m unittest discover -s tests -v
docker build -t newapi16:1.0.0 .
NEWAPI16_LOCAL_TEST=1 python -m src.main

Release-source checks and benchmark evidence should be stored under evidence/ without secrets. This is a source-monitoring product, not procurement/legal advice.