← all tools
Data & sourcing

BuiltWith

Find every company running the technology you recruit for.

Cost per callBYOK · vendor billed
Your own keyrequired
CategoryData & sourcing

BuiltWith knows what software a website is built on. Ask who uses React, Kubernetes or Salesforce and you get the companies that need people who know it. Point it at one company instead and you get their whole stack, which tells you whether your candidate fits.

BuiltWith pairs with GitHub on technical roles. One finds the companies on a stack, the other finds the engineers who know it.

things you can ask for

  • Which UK companies use Kubernetes, and which of them are hiring for it per TheirStack?
  • What is this company built on, and does this candidate's stack match?
  • Find firms running Salesforce, then source their admins through Apollo
  • Take this list and have Hyreflow Agent rank it against my ICP

works well with BuiltWith

  • TheirStack

    a stack plus a live role beats either signal alone

  • GitHub

    the engineer side of the same technical signal

  • Apollo

    names inside the companies running that stack

  • Hyreflow Agent

    score a long company list without reading it

Ask for the outcome and your agent composes the run itself. Or start from a skill, a whole pipeline it already knows end to end.

browse all skills →

What your agent reads before it touches BuiltWith

Every tool ships with a written playbook, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.

Read the BuiltWith docs →
Show the raw playbookwritten for the agent

HOW in lib/builtwith.py. Index: reference/docs/builtwith/raw/endpoints.md.

Auth & config

  • Host: https://api.builtwith.com · Auth: KEY query param (env BUILTWITH_API_KEY; auto-injected by the client; never hardcode).
  • Each API is separately versioned (Domain v22, Lists12, rv4, free1, Trends v6, ctu3, kw2). Credit/quota-metered per plan — Lists is the heavy one.

Operations

  • domain(lookup) — full tech profile of a site. lists(tech) / iter_lists(tech)sites using a technology (the sourcing endpoint; paginated via OFFSET/NextOffset). company_to_url(company) — name→domain. trends(tech) — adoption over time. relationships(lookup), keywords(lookup), free(lookup) (light/safe pilot). Anything else → request().

Recruiter use (why it's here)

  • lists(tech) = source companies by stack — "who uses React / Kubernetes / Salesforce / Shopify" → those companies hire for that stack (IT-recruiting BD + candidate-company targeting). Heavy/credit-costly: pilot small, page with iter_lists(max_records=…).
  • domain(domain) = qualify/enrich one company by tech — match a company's stack to a candidate's skills, or qualify an ICP by required tech (e.g. "uses Go + Kubernetes").
  • company_to_url(name) resolves a sponsor/company to its domain before domain.

Handoff

Sourcing/qualification (IT): lists(tech) → companies on a stack → qualify vs ICP → find hiring managers (people-search) → enrich → outreach/ATS. Or enrich a known company's stack with domain to sharpen targeting. Pairs with [[github]] (the dev-side signal) for technical roles.

Callable surface — lib/builtwith.py

Import: from lib.builtwith import BuiltWith → instantiate BuiltWith() (reads key from env). Base: https://api.builtwith.com. Generic passthrough: request(method, path, *, params, json).

  • categories(**params) -> Any — GET /v22/api.json?CATEGORIES=1 — lookup table: the full list of every technology
  • company_to_url(company: str, **params) -> Any — GET /ctu3/api.json?COMPANY={name} — resolve a company name → domain (feed domain).
  • domain(lookup: str, **params) -> Any — GET /v22/api.json?LOOKUP={domain} — full tech profile of a domain (qualify/enrich by tech stack).
  • free(lookup: str, **params) -> Any — GET /free1/api.json?LOOKUP={domain} — free-tier basic tech lookup (light; safe pilot).
  • iter_lists(tech: str, *, max_records: int = 1000, **params) -> Iterator[dict] — Walk Lists API pages via NextOffset (bounded by max_records). Field/offset names follow the
  • keywords(lookup: str, **params) -> Any — GET /kw2/api.json?LOOKUP={domain} — keywords associated with a domain.
  • lists(tech: str, **params) -> Any — GET /lists12/api.json?TECH={tech} — companies/sites using a technology (the sourcing endpoint).
  • relationships(lookup: str, **params) -> Any — GET /rv4/api.json?LOOKUP={domain} — sites sharing relationships (shared trackers/IDs).
  • trends(tech: str, **params) -> Any — GET /trends/v6/api.json?TECH={tech} — adoption trend (usage over time) for a technology.
  • vector_search(query: str, *, limit: int = 10, **params) -> Any — GET /vector/v1/api.json?QUERY={text}&LIMIT={n} — semantic search over BuiltWith's