# Company Facts API (also served as the ATS Jobs API) Company data read from the official or original source, each record with a link to where it came from. Newly formed US businesses from the state registers of New York, Colorado, Oregon, Connecticut and Pennsylvania, with their website attached only on proof. Official company registers, EU VAT, SEC financials, domain, DNS and tech stack. And open job postings read first-hand from the applicant-tracking system behind a company's careers page: Greenhouse, Ashby, Lever and Workable. ## Company data - GET https://companyfacts.dev/v1/new-businesses?states=CO,NY&mode=new : businesses formed in a date window, newest first (mode search by legal name, mode lookup by the state's entity number for KYB checks). Each record carries its website when one was found with proof (the site's own pages show the exact legal name and the register's city, state or ZIP), else "no website found". Never returns officers, registered agents, emails, phones or street addresses. - GET https://companyfacts.dev/v1/company-search?state=CO&tech=Shopify : search every company we track by state, city, name, formation date, technology on its site, published phone, role inbox or contact page, and hiring. No match is free. - GET https://companyfacts.dev/v1/company?domain=stripe.com : one company from its domain: registrar, DNS and email provider, tech stack, hiring; add name and country for the register entry or ticker for SEC figures. - GET https://companyfacts.dev/v1/company-changes?domain=example.com : what changed at a company and when: roles opened and closed, contacts and technologies added or dropped, register status. REST and x402 only. - GET https://companyfacts.dev/v1/company-contacts?domain=example.com : phones, role inboxes, contact page and address exactly as the company published them on its own site, each with its source page. US companies, never guessed. REST and x402 only. Python: `pip install groundtruth-company`. LangChain: `pip install langchain-groundtruth`. ## Why the job directory exists Those vendors all publish open, documented job board APIs, and all of them are useless unless you already know the company's board name: that Anthropic's is `anthropic`, that Mistral's is `mistral.ai`. None of them publishes a directory of its customers, and none could, because no vendor knows about the others. This carries one: 8532 boards, each confirmed against the vendor's own API. ## Use it as an MCP server, with no install POST JSON-RPC to https://companyfacts.dev/mcp (Streamable HTTP, protocol 2026-07-28). There is nothing to pip or npx. Tools: - `find_company_board`: Find which applicant-tracking system a company's careers page runs on. - `list_open_jobs`: Every open job at one company, read from its own careers system. - `compare_companies`: Open jobs across several companies at once, in one schema. - `job_changes`: What changed in hiring, day by day: jobs newly posted, taken down, reopened, or edited (title, location or salary), read daily from every job board in the directory. - `read_page`: Any public web page or PDF as clean markdown, with its title and final URL after redirects. - `extract_page`: Read a web page and return the named fields as JSON, using only what the page states; a value the page does not give comes back empty rather than guessed. - `check_email`: Is this address worth sending to: syntax, whether the domain exists and has mail servers, and whether it is a throwaway, role (info@, sales@) or free-provider address. - `domain_lookup`: For one domain: whether it is registered, its registrar, created, updated and expiry dates, status codes and nameservers (from the registry's RDAP server), plus its A, AAAA, MX, NS and TXT records, the email provider behind its MX, and whether it publishes SPF and DMARC. - `detect_tech_stack`: Fetch one web page and report the technologies behind it (CMS, ecommerce platform, analytics, CDN, web server, frameworks, payment processors, email provider) with a confidence and the evidence for each. - `validate_vat`: Checks one VAT number against the European Commission's VIES service and returns whether it is a live registration and, where the member state shares it, the registered name. - `search_company_registry`: Searches one country's official company register by name and returns registered companies in one consistent shape: number, legal name, status, legal form, dates, town and postcode, and a link to the register entry. - `search_papers`: Search the OpenAlex catalogue of scholarly papers by keyword, look papers up by DOI, list the papers that cite one work, or list a university's or journal's papers. - `search_hacker_news`: Search Hacker News stories and comments with date, points and comment-count filters, read the live front page and the top, best, new, ask and show lists in rank order, or read whole comment threads. - `sec_financials`: Reads US public company financials from SEC EDGAR XBRL. - `hiring_summary`: One company's hiring at a glance: open roles counted by department and by location, remote share, salary ranges per currency where the job board publishes pay, and which roles opened or closed in the last 7 or 30 days from a daily record of every board. - `federal_contracts`: Searches awarded US federal contracts on USAspending. - `app_store_lookup`: Search the Apple App Store, look apps up by id or bundle id, read customer reviews, or get the top free, paid and grossing charts, per country. - `company_lookup`: One company in one call, from its domain: registrar, DNS and email provider, the website's tech stack, and hiring from its own job board (open roles by department and place, salary ranges, roles opened or closed lately). - `new_businesses`: Searches the official Secretary of State business registers of New York, Colorado, Oregon, Connecticut and Pennsylvania, in one record format. - `company_search`: Finds companies across everything we track: newly formed New York, Colorado, Oregon, Connecticut and Pennsylvania businesses with a website found with proof, and every FDIC-insured bank in any state. ## Or as a plain HTTP API - GET https://companyfacts.dev/v1/companies?q=anthropic - GET https://companyfacts.dev/v1/jobs?company=stripe&limit=5 - OpenAPI: https://companyfacts.dev/openapi.json Free tier: 10 requests a day, 25 jobs each, no key. ## Web tools - GET https://companyfacts.dev/v1/read?url=https://example.com : any public web page or PDF as clean markdown - GET https://companyfacts.dev/v1/extract?url=...&fields=name,price : structured JSON from a page, values only from the page text. Also takes schema (a JSON Schema) and instructions. Paid only. - GET https://companyfacts.dev/v1/email-check?email=jane@example.com : syntax, mail servers, disposable, role and free-provider flags. Does not contact the mailbox. Some sites refuse automated readers; those calls fail and cost nothing. ## Paying for more Per call, with no account: x402 (USDC on Base). Past the free allowance the API answers 402 with the price in the PAYMENT-REQUIRED header; pay and retry. To pay from the first call, use the same tools under https://companyfacts.dev/x402/v1/ (for example /x402/v1/read): no free tier, the 402 comes first. Status and prices: https://companyfacts.dev/pricing . Uptime and correctness of every tool, each checked against an outside source: https://companyfacts.dev/status (JSON: https://companyfacts.dev/status.json). List: https://companyfacts.dev/.well-known/x402 A key lifts the cap to 1000 jobs a call and replaces the daily limit with a call balance: - $10 once: 2,000 calls that never expire. https://buy.stripe.com/dRm7sM04G4iManHeO51Jm00 - $49 a month: 20,000 calls a month, refilled each billing month, cancel any time. https://buy.stripe.com/9B6aEYg3EbLe8fz35n1Jm01 The key is shown on the page Stripe sends you to after paying. Send it as `Authorization: Bearer `, on REST calls or on POST /mcp. ## What it will not do Salaries are parsed into numbers only when unambiguous. An hourly rate, a currency like "kr" that means three different things, or bands in two currencies all yield no figure rather than a wrong one. `salary_text` always keeps what the employer actually wrote. No personal data. Recruiter names are never returned and contact details are stripped from job descriptions. Every posting carries `verify_url`, the employer's own advert, so any value reported to a user can be checked at the source.