UK Trade Credentials Verifier avatar

UK Trade Credentials Verifier

Pricing

from $12.00 / 1,000 multi-register verifications

Go to Apify Store
UK Trade Credentials Verifier

UK Trade Credentials Verifier

Checks a UK tradesperson or business against Gas Safe, NICEIC, FMB, TrustMark, and Companies House to confirm active licensing, registration and insurance status. From £0.007 per register match.

Pricing

from $12.00 / 1,000 multi-register verifications

Rating

0.0

(0)

Developer

joseph fadero

joseph fadero

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Checks a UK tradesperson or business name (or Companies House registration number) against Gas Safe, NICEIC, FMB, TrustMark, and Companies House to confirm active licensing, registration and insurance status. From £0.007 per register match.

Inputs

FieldDefaultDescription
businessNameC Smith Carpentry & Joinery LtdUK tradesperson/business name. Real, currently-listed business (confirmed live on both Companies House and the FMB register during build) — used as the default so the Actor returns a real match with zero config.
registrationNumberCompanies House registration number, used instead of/alongside businessName for a direct Companies House lookup.
checkSourcesall 5Which registers to check: gasSafe, niceic, fmb, trustmark, companiesHouse.
postcodeOptional, disambiguates common business names in the output record (not currently used to filter FMB results, since FMB's name-search endpoint does not require it).

At least one of businessName or registrationNumber must be supplied, or the run fails clearly.

Outputs

One record per run, results holding one entry per checked register:

{
"businessName": "C Smith Carpentry & Joinery Ltd",
"postcode": null,
"results": [
{ "source": "fmb", "status": "active", "registrationId": "c-smith-carpentry-joinery-ltd", "expiryDate": null, "detail": "..." },
{ "source": "companiesHouse", "status": "active", "registrationId": "15552718", "expiryDate": null, "detail": "..." },
{ "source": "gasSafe", "status": "unavailable", "registrationId": null, "expiryDate": null, "detail": "..." }
],
"matchCount": 2,
"registersChecked": 5,
"companiesHouseStatus": "active",
"incorporationDate": "2023-04-11",
"sicCodes": ["43320"],
"lastVerifiedAt": "2026-09-15T17:29:45.703Z",
"chargedEvent": "multi-register-match"
}

status is one of active, lapsed, not-found, or unavailable (a source that could not be checked for a real, documented technical reason — see below).

Which registers actually work (honest status, confirmed live 2026-09-15)

RegisterStatusWhy
FMB (Federation of Master Builders)WorkingGET https://www.fmb.org.uk/find-a-builder.html?name=<query> returns real, server-rendered HTML with no auth or JS required. Confirmed live against a real search ("Smith" → 24 real results) and parsed with cheerio (article.article-list-item .article-title-link + .article-teaser p).
Companies HouseWorking (needs a free API key)Official REST API (api.company-information.service.gov.uk), HTTP Basic auth with the API key as username. Reads the key from COMPANIES_HOUSE_API_KEY. Get a free key at https://developer.company-information.service.gov.uk/. If the env var is unset, this source alone reports unavailable — it never crashes the run.
Gas Safe RegisterunavailableThe entire site is behind Incapsula/Imperva bot-protection — confirmed live: every request (including a plain homepage GET with a real browser User-Agent) returns HTTP 403 with an Incapsula challenge page. Not solvable with HTTP + cheerio; would need a headless browser plus a residential proxy, which this Actor deliberately does not use.
NICEICunavailableThe public search widget on niceic.com embeds a separate legacy ASP.NET WebForms app (proximity.niceic.com/mainform.aspx). It's reachable over plain HTTP, but the search action is a stateful __VIEWSTATE/__EVENTVALIDATION postback AND the form carries a hidden gRecaptchaResponse field — confirming the real search is reCAPTCHA-gated server-side. Not solvable without a headless browser and CAPTCHA-solving.
TrustMarkunavailableThe whole site (including the tradesperson-search pages) is an Angular SPA shell (<app-root>, ng-version) with no server-rendered content. The compiled JS bundle (~3MB) was fetched and inspected live; it only exposes CMS/content API routes (/api/news, /api/navigation, /api/businesses/NumberOfActiveBusinesses, etc.) — no public, unauthenticated tradesperson-search endpoint could be found. Not solvable with HTTP + cheerio.

Each register is checked independently — one being down, blocked, or impractical never crashes or blocks the others. Small delays (400ms) are added between source checks to stay polite to these low-volume public sites.

Pricing (Pay Per Event)

EventPriceTrigger
Actor Start$0.05Charged once per run (built-in).
Business Checked No Match$0.002Zero requested registers returned a real match (built-in dataset-item event).
Single-Register Verification$0.007A real match on exactly 1 requested register.
Multi-Register Verification (primary)$0.012A real match on 2+ requested registers.
Companies House Enrichment$0.004companiesHouse was requested AND real incorporation/SIC data came back — stacks on top of whichever match event applies.

Notes

  • Pure HTTP + cheerio, no headless browser, no Dockerfile.
  • Set COMPANIES_HOUSE_API_KEY as an environment variable on the Actor to enable Companies House lookups (free to obtain).