{"api":"Cached company headcount","apiRows":{"Employee profile":2381,"Cached employee profile":914,"Employee email":1502,"Cached employee email":416,"Email validation":2954,"Employee phone":558,"Company profile":270,"Cached company profile":124,"Company headcount":35,"Cached company headcount":63,"Phone validation":467,"Post comments":73,"Post reactions":73,"Employee lookalikes":42,"Company lookalikes":166,"Company technologies":201,"Company job count":26,"Employee posts":62,"Company posts":70,"Company funding":56,"Cached company funding":64,"Company jobs":66,"Employee search":234,"Company search":163,"Job search":78,"Reverse email lookup":322,"Post search":70,"Post details":55,"Job details":46,"Employee comments":53,"Employee reactions":33,"Post reposts":7,"Employee recommendations":17,"Job lookalikes":10,"Employee articles":25,"Company enrichment":208,"Cached company enrichment":705,"People search":236,"Cached people search":550,"Company discovery":409,"Cached company discovery":446,"Job postings":153,"Job posting details":64,"Person enrichment":48,"Leadership changes":32,"Company hierarchy":28},"treeCounts":{"Employee profile":{"best":70,"top":3},"Cached employee profile":{"best":58,"top":3},"Employee email":{"best":79,"top":3},"Cached employee email":{"best":22,"top":3},"Email validation":{"best":114,"top":3},"Employee phone":{"best":44,"top":3},"Company profile":{"best":18,"top":3},"Cached company profile":{"best":8,"top":3},"Company headcount":{"best":5,"top":3},"Cached company headcount":{"best":5,"top":3},"Phone validation":{"best":33,"top":3},"Post comments":{"best":6,"top":3},"Post reactions":{"best":6,"top":3},"Employee lookalikes":{"best":3,"top":3},"Company lookalikes":{"best":16,"top":3},"Company technologies":{"best":21,"top":3},"Company job count":{"best":3,"top":3},"Employee posts":{"best":7,"top":3},"Company posts":{"best":7,"top":3},"Company funding":{"best":8,"top":3},"Cached company funding":{"best":6,"top":3},"Company jobs":{"best":24,"top":3},"Employee search":{"best":20,"top":3},"Company search":{"best":11,"top":3},"Job search":{"best":8,"top":3},"Reverse email lookup":{"best":22,"top":3},"Post search":{"best":6,"top":3},"Post details":{"best":9,"top":3},"Job details":{"best":6,"top":3},"Employee comments":{"best":5,"top":3},"Employee reactions":{"best":3,"top":3},"Post reposts":{"best":1,"top":1},"Employee recommendations":{"best":2,"top":2},"Job lookalikes":{"best":1,"top":1},"Employee articles":{"best":2,"top":2},"Company enrichment":{"best":27,"top":3},"Cached company enrichment":{"best":32,"top":3},"People search":{"best":26,"top":3},"Cached people search":{"best":25,"top":3},"Company discovery":{"best":26,"top":3},"Cached company discovery":{"best":36,"top":3},"Job postings":{"best":17,"top":3},"Job posting details":{"best":16,"top":3},"Person enrichment":{"best":7,"top":3},"Leadership changes":{"best":4,"top":3},"Company hierarchy":{"best":4,"top":3}},"bestPages":{"Employee profile":["/best-linkedin-profile-api","Best LinkedIn profile API in 2026"],"Cached employee profile":["/best-cached-linkedin-profile-api","Best cached LinkedIn profile API in 2026"],"Employee email":["/best-email-finder-api","Best email finder API in 2026"],"Cached employee email":["/best-cached-email-finder-api","Best cached email finder API in 2026"],"Email validation":["/best-email-validation-api","Best email validation API in 2026"],"Employee phone":["/best-phone-finder-api","Best phone finder API in 2026"],"Company profile":["/best-linkedin-company-profile-api","Best LinkedIn company profile API in 2026"],"Cached company profile":["/best-cached-linkedin-company-profile-api","Best cached LinkedIn company profile API in 2026"],"Post comments":["/best-linkedin-post-comment-api","Best LinkedIn post comment API in 2026"],"Post reactions":["/best-linkedin-post-reaction-api","Best LinkedIn post reaction API in 2026"],"Employee posts":["/best-linkedin-person-post-api","Best LinkedIn person post API in 2026"],"Company posts":["/best-linkedin-company-post-api","Best LinkedIn company post API in 2026"],"Post search":["/best-linkedin-post-search-api","Best LinkedIn post search API in 2026"],"Post details":["/best-linkedin-post-details-api","Best LinkedIn post details API in 2026"],"Employee comments":["/best-linkedin-person-comment-api","Best LinkedIn person comment API in 2026"],"Employee reactions":["/best-linkedin-person-reaction-api","Best LinkedIn person reaction API in 2026"],"Cached company enrichment":["/best-cached-company-enrichment-api","Best cached company enrichment API in 2026"],"Cached people search":["/best-cached-people-search-api","Best cached people search API in 2026"],"Cached company discovery":["/best-cached-company-discovery-api","Best cached company discovery API in 2026"]},"first":[{"provider":"BlitzAPI","api":"Cached company headcount","website":"https://blitz-api.ai","pricingPage":"https://blitz-api.ai/pricing","pitch":"Break down a company's employees by country from its LinkedIn company URL, with a count and percentage per country code, plus the total employees counted.","strengths":[],"aggregators":[{"aggregator":"treg","url":"https://treg.to/catalog/endpoints/blitzapi.companies.employees.by-country","ownKey":"free","paid":true,"perThousand":0.495,"usd":0.000495,"per":"result","resultsPerPage":null,"callStated":true}],"freshness":"stored","fieldFreshness":null,"history":null,"keep":"no limit, after the subscription ends too, for internal business use only; erased when the person asks","use":"BlitzAPI grants the Client a limited, non-exclusive, non-transferable, non-sublicensable, revocable license, during the term of its subscription, to access and use the Services and the Data for the Client’s own internal business purposes only, including to identify, research and communicate with businesses and professionals for legitimate B2B sales, marketing, recruiting and business-development activities. Agencies may use the Data on behalf of their own clients only under the Agency’s own subscription and solely for those clients’ internal B2B purposes, without any redistribution or resale rights. Under these Terms, resale and redistribution of the Data are strictly prohibited. The Client shall not, in whole or in part, directly or indirectly: resell, redistribute, sublicense, rent, lease, share, syndicate, publish or otherwise make the Data available to any third party; expose or provide access to the Data or the API through the Client’s own product, API, application, file export, feed, or interface used by third parties; act as a data provider, broker or reseller of the Data, or create any product, service or dataset (aggregated or not, identified or de-identified) derived from the Data for the benefit of third parties; list, offer or distribute the Data or API access on any marketplace or aggregation platform (e.g., RapidAPI, Apify, Clay); or access the Services on behalf of, or for the benefit of, any third party other than the Client’s own Authorized Users. Resale, redistribution or integration for the benefit of third parties is permitted only where expressly authorized under a separate signed Commercial Agreement with BlitzAPI. The Client shall not use the Data or Services to: send spam or unsolicited communications, or otherwise breach anti-spam, ePrivacy, PECR, CAN-SPAM, CASL or TCPA rules; engage in phishing, fraud, deception, harassment, defamation, or any unlawful or harmful activity; target consumers or use the Data for B2C purposes, consumer profiling, or any non-professional context; promote illegal products or services, firearms, adult content, gambling, or hate speech; use the Data for any purpose governed by the Fair Credit Reporting Act (FCRA) or equivalent, including consumer credit, employment, or insurance eligibility; infer, derive or enrich special categories of personal data (sensitive data); circumvent technical, rate or Fair Use limits, probe or reverse-engineer the Services, or extract data from the Services by automated means other than the documented API; use the Data to build, train, seed or benchmark a database or product intended to substitute for or compete with the Services; or infringe the rights of third parties, including data-protection rights and the terms of source platforms (e.g., LinkedIn). The Client may not access or use the Services if the Client or any of its Authorized Users is a competitor of BlitzAPI (as reasonably determined by BlitzAPI), nor for the purpose of building or supporting a competing product or dataset.","plan":"Credits","who":"AI agents, on their own or for their human, through BlitzAPI's agent storefront, no BlitzAPI account needed","billing":"one-time","charged":null,"pay":0.6,"currency":"USD","exchangeRate":1,"termMonths":null,"from":null,"graduated":null,"units":null,"unit":"result","renews":"never","expires":null,"calls":null,"monthlyCap":null,"perThousand":1,"waterfall":null,"listPerThousand":null,"overagePerThousand":null,"addons":null,"notFoundPerThousand":0,"catchAllPerThousand":null,"bounceRefund":null,"repeatFree":null,"alsoPaysFor":[],"sharesBudgetWith":["Find People","Employee Finder","Waterfall ICP Search","Company Search","TAM By Jobs","TAM By People","Search Jobs","Search Company Jobs","Person Enrichment","Find Work Email","Reverse Email Lookup","Reverse Phone Lookup","Company Enrichment","Domain to LinkedIn URL","LinkedIn URL to Domain","Company Employee Distribution by Department"],"startPerCall":null,"extras":[],"per":"call","resultsPerPage":null,"resultsCap":null,"perDay":null,"perSecond":null,"concurrent":null,"batch":1,"answer":"in the call","latencyMs":null,"call":null,"method":"POST","path":"/v2/enrichment/company-distribution-by-country","send":"company_linkedin_url; is_recent_hire","fields":["company URL","headcount","headcount by location","headcount share by location","credits consumed","credits remaining","credits reset date","second rate limit","requests left this second","request ID"]},{"provider":"Coresignal","api":"Cached company headcount","website":"https://coresignal.com","pricingPage":"https://coresignal.com/pricing/","pitch":"Retrieve monthly historical company headcount and follower data by company ID or shorthand name.","strengths":[],"aggregators":[],"freshness":"1 month","fieldFreshness":null,"history":null,"keep":"“Upon written request, either Party will return or destroy all copies of the other Party’s Confidential Information that are in its possession or control”, the Data being “a confidential, proprietary, trade secret and copyrighted work of Coresignal”","use":"“a non-exclusive, non-transferable, worldwide, limited license to use the Data for internal business purposes” [...] “The Client has no right to communicate or display to the public the Data, Substantial part of the Data, or the Data’s logic and structure.” [...] “Client shall not re-utilize the Data. For the purpose of the Agreement, ‘Re-utilization’ shall mean any form of making available to the public the Data or a Substantial part of the Data by the distribution of copies, renting, online, or other forms of transmission (including but not limited to sub-licensing).” “Notwithstanding Article 1.2. of the Agreement, the Client is permitted to create derivative works using the Data and license such works to its clients as long as the Client complies with the terms and conditions of the Agreement. [...] works created by the Client shall entail sufficient alteration of the Data to constitute derivate works (e.g., integration of individual data points taken from the Data to the Client’s own product or service).” “The Client shall not, directly or indirectly, use the Data or any of the contents of the Data to conduct or operate any bulk mail activity” [...] “The Client shall only use or otherwise process such information in accordance with all applicable data protection laws. The Client shall be solely responsible for assessment and compliance of the Data’s use by the Client with all applicable data protection laws and regulations.”","plan":"Pro","who":"anyone with a business email","billing":"monthly","charged":null,"pay":499,"currency":"USD","exchangeRate":1,"termMonths":1,"from":null,"graduated":null,"units":35000,"unit":"credit","renews":"month","expires":"end of the billing cycle","calls":3500,"monthlyCap":null,"perThousand":142.5714,"waterfall":null,"listPerThousand":null,"overagePerThousand":null,"addons":null,"notFoundPerThousand":0,"catchAllPerThousand":null,"bounceRefund":null,"repeatFree":null,"alsoPaysFor":[],"sharesBudgetWith":["Jobs APIs","Employee Posts APIs","Company Posts APIs","Company APIs","Employee APIs","Real-time Employee API","Search Preview","Agentic Search API","Employee contact enrichment","Bulk Collect","Webhooks"],"startPerCall":null,"extras":[],"per":"call","resultsPerPage":null,"resultsCap":null,"perDay":null,"perSecond":10,"concurrent":null,"batch":1,"answer":"in the call","latencyMs":null,"call":"Historical Headcount API","method":"GET","path":"/v2/historical_headcount/collect/{shorthand_name}","send":"shorthand_name","fields":["created at","provider record ID","company ID","company URL","company slug","canonical company slug","name","website","size","industry","company type","location","country","headcount","followers"]},{"provider":"Enrich Layer","api":"Cached company headcount","website":"https://enrichlayer.com","pricingPage":"https://enrichlayer.com/pricing","pitch":"Get the total number of employees of a company. Returns employee counts from various sources.","strengths":[],"aggregators":[{"aggregator":"Orthogonal","url":"https://orthogonal.com/discover/enrich-layer","ownKey":null,"paid":true,"perThousand":23.6,"usd":0.0236,"per":"call","resultsPerPage":null,"callStated":true},{"aggregator":"treg","url":"https://treg.to/catalog/endpoints/enrichlayer.company.employees.count","ownKey":"free","paid":true,"perThousand":100,"usd":0.1,"per":"result","resultsPerPage":null,"callStated":true}],"freshness":"stored","fieldFreshness":null,"history":null,"keep":"no limit in its public terms, a summary of its full terms (\"for complete terms including definitions, fees, intellectual property rights, termination procedures, and dispute resolution, please refer to the full terms document or contact our legal team\")","use":"no limit in its public terms, a summary of its full terms (\"for complete terms including definitions, fees, intellectual property rights, termination procedures, and dispute resolution, please refer to the full terms document or contact our legal team\"); Enterprise's \"Unlimited enriched contacts\" is \"Subject to Fair Usage Policy as outlined in our Terms of Service\"","plan":"Growth","who":"anyone 18 or over, on a 12-month contract","billing":"monthly","charged":null,"pay":299,"currency":"USD","exchangeRate":1,"termMonths":1,"from":null,"graduated":null,"units":25000,"unit":"credit","renews":"month","expires":"at the end of each month","calls":25000,"monthlyCap":null,"perThousand":11.96,"waterfall":null,"listPerThousand":null,"overagePerThousand":12,"addons":null,"notFoundPerThousand":0,"catchAllPerThousand":null,"bounceRefund":null,"repeatFree":null,"alsoPaysFor":[],"sharesBudgetWith":["all endpoints"],"startPerCall":null,"extras":[{"fields":["employee count"],"perThousand":11.96}],"per":"call","resultsPerPage":null,"resultsCap":null,"perDay":null,"perSecond":15,"concurrent":"n/a","batch":1,"answer":"in the call","latencyMs":null,"call":null,"method":"GET","path":"/api/v2/company/employees/count","send":"url; coy_name_match, at_date, use_cache, estimated_employee_count, employment_status","fields":["headcount"]},{"provider":"Renidly","api":"Cached company headcount","website":"https://renidly.com","pricingPage":"https://renidly.com/pricing","pitch":"Employee-count total + distribution buckets (by department, seniority, location …). Use for sizing and structure signals.","strengths":[],"aggregators":[],"freshness":"20 minutes","fieldFreshness":null,"history":null,"keep":"no limit","use":"Subject to your compliance with these Terms, we grant you a non-exclusive, non-transferable, revocable licence to access and use the Service for your internal business purposes during the term. [...] You agree not to: Use the Service to violate any law, regulation, or third-party right. Re-sell, sub-license, or repackage the Service or its raw data outputs as a competing data product without our prior written agreement. [...] Build profiles to harass, dox, or discriminate against individuals, or to make automated decisions producing legal or similarly significant effects on a person without an adequate lawful basis and human review. Use the Service to send unsolicited bulk communications in violation of applicable anti-spam laws (including CAN-SPAM, CASL, GDPR/ePrivacy and equivalents). [...] You are responsible for: [...] Ensuring your downstream use of enriched data complies with all applicable laws.","plan":"Scale","who":"anyone 18 or over with a work email (Gmail, Yahoo, Outlook and other free providers aren't accepted)","billing":"one-time","charged":null,"pay":290,"currency":"USD","exchangeRate":1,"termMonths":null,"from":null,"graduated":null,"units":100050,"unit":"credit","renews":null,"expires":"never","calls":100050,"monthlyCap":null,"perThousand":2.9,"waterfall":null,"listPerThousand":null,"overagePerThousand":null,"addons":null,"notFoundPerThousand":null,"catchAllPerThousand":null,"bounceRefund":null,"repeatFree":"20 minutes","alsoPaysFor":[],"sharesBudgetWith":["every billable request to the data, live, and email APIs"],"startPerCall":null,"extras":[],"per":"call","resultsPerPage":null,"resultsCap":null,"perDay":null,"perSecond":4.17,"concurrent":null,"batch":1,"answer":"in the call","latencyMs":null,"call":null,"method":"GET","path":"/api/v2/organization/headcount","send":"id","fields":["headcount","headcount by department","headcount by seniority","headcount by location"]},{"provider":"The Swarm","api":"Cached company headcount","website":"https://www.theswarm.com","pricingPage":"https://www.theswarm.com/pricing","pitch":"Team size changes, location data, and industry","strengths":[],"aggregators":[],"freshness":"stored","fieldFreshness":null,"history":null,"keep":"while your license lasts; on termination, delete it at The Swarm's request, backups included (derived materials without identifiable Swarm Data fields may stay)","use":"your own internal business purposes only (sales prospecting, recruiting, CRM enrichment and the like); no resale or redistribution to third parties, no commercial data product or AI model for external use, no product that competes with The Swarm","plan":"Premium 1000","who":"anyone over 18","billing":"monthly","charged":null,"pay":500,"currency":"USD","exchangeRate":1,"termMonths":1,"from":null,"graduated":null,"units":50000,"unit":"credit","renews":"month","expires":"at the start of each billing cycle: unused credits do not carry forward","calls":50000,"monthlyCap":null,"perThousand":10,"waterfall":null,"listPerThousand":null,"overagePerThousand":10,"addons":null,"notFoundPerThousand":0,"catchAllPerThousand":null,"bounceRefund":null,"repeatFree":null,"alsoPaysFor":["Search Profiles","Search Companies","Relationships","Add Connector"],"sharesBudgetWith":["Fetch Profile","Refresh a Profile","Get Profile/Company Posts","Get Comments / Reactions / Reshares","Network Mapper (for Partners)"],"startPerCall":null,"extras":[],"per":"result","resultsPerPage":null,"resultsCap":null,"perDay":null,"perSecond":1,"concurrent":null,"batch":1000,"answer":"in the call","latencyMs":7,"call":"Fetch Company","method":"POST","path":"/v3/companies/fetch","send":"at least one of ids, linkedin_names (LinkedIn company URL slugs) or linkedin_ids, each up to 1,000 values; fields, x-authenticate-team","fields":["company ID","company slug","name","headcount","historical headcount","size","updated at","matched by"]}],"sketches":[["BlitzAPI, free","/cached-company-headcount-apis/blitzapi/free"],["Coresignal, free","/cached-company-headcount-apis/coresignal/free"],["Enrich Layer, free","/cached-company-headcount-apis/enrich-layer/free"],["Renidly, free","/cached-company-headcount-apis/renidly/free"],["The Swarm, free","/cached-company-headcount-apis/the-swarm/free"]],"total":63,"freshness":["Live","Within an hour","Within a day","Within a week","Within a month","Within a year","Stored, age unknown"],"providers":[{"label":"BlitzAPI","value":"BlitzAPI on its own site"},{"label":"Coresignal","value":"Coresignal on its own site"},{"label":"Enrich Layer","value":"Enrich Layer on its own site"},{"label":"Renidly","value":"Renidly on its own site"},{"label":"The Swarm","value":"The Swarm on its own site"}],"at":[1,9,27,40,49],"fields":{"Cached company headcount":["headcount","company ID","company slug","name","company URL","historical headcount","provider record ID","headcount by department","credits consumed","headcount share by location"]},"same":["api","strengths","waterfall","resultsCap","startPerCall","addons","catchAllPerThousand","bounceRefund","history","perDay","answer"],"facets":["defaults","provider","price","fields","billing","freshness","paysFor"],"ties":{"Cached company headcount":{"tied":["BlitzAPI, contact us"],"movedPages":{},"canonicals":{"BlitzAPI":"free","Coresignal":"free","Enrich Layer":"free","Renidly":"free","The Swarm":"free"}}},"shared":[],"notes":{"name":"The row's name, unique on the sheet: the provider, then the plan's price, like \"API Builderz, $50 monthly\", \"HarvestAPI, $280 pack\", \"Crawlbase, pay as you go\", \"Bright Data, top-up\" (a prepaid balance of any amount), \"free\" or \"contact us\". If two plans share a price, we add the plan's name, then the call's method and path, its units and the call's name, until no two rows share a name. We build the name for the sheet and leave it out of the sheet's CSV and JSON. datacircle.json and datacircle.csv have the name from its API's sheet.","api":"This column names each row's API. \"Employee profile\" returns a person's LinkedIn profile, on LinkedIn profiles. \"Cached employee profile\" returns it from the provider's copy of LinkedIn, on Cached LinkedIn profiles, which lists the LinkedIn profile plans whose Freshness says a copy. \"Employee email\" finds a person's work email, on Find email. \"Cached employee email\", on the Find cached email sheet, finds a person's work email in the provider's stored data. \"Email validation\" checks whether an address takes mail, on Validate email. \"Employee phone\" finds a person's phone number, on Find phone. \"Company profile\" returns a company's LinkedIn page, on LinkedIn company profiles. \"Cached company profile\", on the Cached LinkedIn company profiles sheet, returns a company's LinkedIn page from the provider's copy of LinkedIn. \"Company headcount\" counts a company's staff, on its own sheet. \"Cached company headcount\", on the Cached company headcount sheet, counts a company's staff from the provider's stored data. \"Phone validation\" checks whether a phone number is valid, on Validate phone. \"Post comments\" returns the comments on a LinkedIn post, on LinkedIn post comments. \"Post reactions\" returns who reacted to a LinkedIn post and how, on LinkedIn post reactions. \"Employee lookalikes\" returns people similar to the one you send, on Similar people. \"Company lookalikes\" returns companies similar to the one you send, on Similar companies. \"Company technologies\" returns the tools a company uses, on its own sheet. \"Company job count\" counts the jobs a company has open on LinkedIn, on its own sheet. \"Employee posts\" returns a person's LinkedIn posts, on LinkedIn person posts. \"Company posts\" returns a company's LinkedIn posts, on LinkedIn company posts. \"Company funding\" returns a company's funding rounds, on its own sheet. \"Cached company funding\", on the Cached company funding sheet, returns them from the provider's stored data. \"Company jobs\" returns the jobs a company has open, on Company open jobs. \"Employee search\" finds people by job title, company and place, on LinkedIn people search. \"Company search\" finds companies by industry, size and place, on LinkedIn company search. \"Job search\" finds jobs by title, company and place, on LinkedIn job search. \"Reverse email lookup\" finds the person behind an email, on its own sheet. \"Post search\" finds posts by keyword, on LinkedIn post search. \"Post details\" returns a post from its URL or ID, on LinkedIn post details. \"Job details\" returns a job from its URL or ID, on LinkedIn job details. \"Employee comments\" returns the comments a person left on posts, on LinkedIn person comments. \"Employee reactions\" returns the posts a person reacted to, on LinkedIn person reactions. \"Post reposts\" returns the people who reposted a LinkedIn post, on LinkedIn post reposts. \"Employee recommendations\" returns the recommendations on a person's LinkedIn profile, on LinkedIn person recommendations. \"Job lookalikes\" returns jobs similar to the one you send, on Similar jobs. \"Employee articles\" returns a person's LinkedIn articles, on LinkedIn person articles. \"Company enrichment\" returns a company's company from the provider's own database, on Company enrichment. \"Cached company enrichment\", on the Cached company enrichment sheet, returns a company's company from the provider's stored data. \"People search\" finds people in the provider's own database. \"Cached people search\", on the Cached people search sheet, finds people in the provider's stored data. \"Company discovery\" finds companies in the provider's own database. \"Cached company discovery\", on the Cached company discovery sheet, finds companies in the provider's stored data. \"Job postings\" finds job postings in the provider's own database. \"Job posting details\" returns a job posting from its ID. \"Person enrichment\" returns a person's company from the provider's database. \"Leadership changes\" returns the new hires, promotions and departures in a company's senior roles. \"Company hierarchy\" returns a company's parent companies and subsidiaries. Pick an API from the GTM APIs list on the sheet's left, or pick All GTM APIs to see all thirty-nine in one sheet. We name each folder in the zip after its API.","score":"We score each plan out of 100 on price, data, cost to get started, bundle and performance. We score data and performance from our benchmark of the provider's call. Until we benchmark it, they are N/A, and so is the Overall score. A plan whose data score is 0 has an Overall score of 0, whatever its other scores. Each API's sheet shows what we measured on each benchmarked plan, in the columns after its price. We rank a plan's price against its API's other scored plans, and score cost to get started and bundle on the plan alone. We give N/A to free, yearly and contact us plans, plans over $500 to start, plans bought on a marketplace and plans that need your own LinkedIn account. Click Score in the sheet's bar to set the five weights. The JSON, datacircle.json and datacircle.csv give each plan's score at the default weights, empty for N/A. The sheet's CSV has no scores.","Price score":"The plan's price score out of 100: its $ per 1,000 ranked against the other scored plans of its API, and what a call that finds nothing costs. On the sheet, point at the score to see why.","Data score":"The plan's data score out of 100, from our benchmark of its provider's call: how complete the call's answer is, or how often it is right, depending on the API. Until we benchmark the call, the score is N/A, and so is the Overall score. On the sheet, point at the score to see how we scored it. Each API's sheet shows what we measured on each benchmarked plan, in the columns after its price.","Cost to get started score":"The plan's score out of 100 for getting your first result: who can get it, how you pay, and the least you pay before it. On the sheet, point at the score to see why.","Bundle score":"The plan's score out of 100 for the other calls its price gets you, as its pages list them under Also pays for. On the sheet, point at the score to see why.","Performance score":"The plan's performance score out of 100, from our benchmark of its provider's call: the fastest benchmarked provider's median time divided by this provider's. A median under 0.1 s counts as 0.1 s, since the baseline we take off varies by about that much. Until we benchmark the call, the score is N/A, and so is the Overall score. On the sheet, point at the score to see how we scored it. Each API's sheet shows what we measured on each benchmarked plan, in the columns after its price.","perThousand":"Dollars for 1,000 companies on this plan. 0 on a free plan. On a plan that charges by the page, the price of the full pages 1,000 companies need, at the most companies a page holds, and blank when the provider doesn't say how many companies a page holds. On a flat fee, we spread the fee over the most companies the plan allows in the months the fee pays for. A flat fee with no cap has no price per 1,000 companies: the sheet says \"no limit\", and we leave it blank in the CSV and JSON. Blank too when the call costs no units and the provider doesn't say how many companies the plan allows. On a waterfall's paid plan, the average cost of a call: the price of each provider under Waterfall, weighted by how often a call reaches it. Blank when the router gives no hit rate or no page size for a provider a call can reach.","billing":"How you pay: \"free\", \"on-demand\" (you pay for what you use, with nothing to buy first), \"one-time\" (a pack you pay for first, then use), \"monthly\", \"quarterly\" (every three months), \"half-yearly\" (every six months) or \"yearly\" (a subscription), or \"contact\" (no public price: you ask the provider for one). On the sheet, \"one-time\" reads \"pay first\" and \"on-demand\" \"pay as you go\".","perMonth":"On a subscription: its price for one month in dollars, its Pay divided by the months it buys (termMonths), 12 on most yearly plans. We work it out for the sheet, to the cent. We leave it out of the sheet's CSV and JSON, and datacircle.json and datacircle.csv have it. Blank (null) on every other plan.","notFoundPerThousand":"Dollars for 1,000 companies the provider can't find. 0 when the provider charges nothing for them, as on free plans. On a waterfall, the cost of a call when no provider finds the answer: the sum of the prices of the providers that charge for a miss.","strengths":"The plan's strengths, which we work out from its row: each one is a band that many plans of its API are in. Each API has its own strengths, listed and explained under Strengths on datacircle.dev/fields, and Validate email, Find phone, Validate phone, LinkedIn company profiles, Company headcount, LinkedIn post comments, LinkedIn post reactions, Similar people, Similar companies, Company technologies, Company job count, LinkedIn person posts, LinkedIn company posts, Company funding, Company open jobs, LinkedIn people search, LinkedIn company search, LinkedIn job search, Reverse email lookup, LinkedIn post search, LinkedIn post details, LinkedIn job details, LinkedIn person comments, LinkedIn person reactions, LinkedIn post reposts, LinkedIn person recommendations, Similar jobs, LinkedIn person articles, Company enrichment, People search, Company discovery, Job postings, Job posting details, Person enrichment, Leadership changes and Company hierarchy have none yet. Cached LinkedIn profiles and Find cached email have the strengths of LinkedIn profiles and Find email, but never \"read live\" or \"found live\". The other cached sheets have none yet. Blank ([] in the JSON) when the plan has none, and we leave Strengths off its page. Under Filters, you see only the rows with every strength you tick.","aggregators":"Aggregators like treg and Deepline that sell the row's call: with one aggregator account you reach many providers. Each cell says what a call through the aggregator costs with your own provider key, and what 1,000 companies cost when you pay the aggregator, with no account at the provider: \"treg: your key free, paid $1.50\". We add \"per 1,000 results\" when the aggregator charges per company it finds, and say \"paid, no fixed price\" when the aggregator publishes no price. On a call the aggregator charges by the page, we price 1,000 results at the largest page size, and we write \"paid, page size not stated\" when the aggregator doesn't say how many results a page holds. We write \"listed, how it's sold not stated\" when the aggregator lists the call but doesn't say if you pay the aggregator or use your own key. When the aggregator sells one of the provider's calls and doesn't say which, we add \"this call or another\", then the provider's name and \"call\". \"none\" when no aggregator we checked for the row's API sells the call. A blank cell (null in the JSON) means we haven't checked any aggregator for that API. We skip calls an aggregator doesn't list. In the JSON, each aggregator has its aggregator, its page there under url, ownKey, what a call on your own key costs there, or null when you can't use yours, paid, true when you can pay the aggregator, or null, as ownKey is, when it doesn't say how it sells the call, callStated, false when it sells this call or another of the provider's and doesn't say which, usd, its price for one per in dollars, or null when it sets no price, perThousand, its price for 1,000 in dollars, per, \"call\", \"result\" or \"page\", and resultsPerPage, the most a page holds, or null. So far we have read AnyAPI, Clay, ColdIQ, Databar, Deepline, Monid, Orthogonal, RouterGrowth and treg.","waterfall":"On a call where the router tries one provider after another until one finds the company, like treg's, the column lists each provider it tries, in order, with its call in brackets, as the router names it, then its price per 1,000 on this plan, how often it finds the company, and \"misses billed\" when it charges for a miss. For a provider that charges by the page, we count the full pages that hold 1,000 results at the largest page size, and we write \"page size not stated\" when the provider doesn't say how many results a page holds. The router publishes how often each provider finds a company over all its calls, and we assume each provider keeps that rate on the calls the earlier providers miss. We leave the column blank on calls with a single provider. In the JSON, each step has its provider, its call, which you can call alone, its perThousand, its per, its resultsPerPage, as in the row, its hitRate, from 0 to 1 or null when the router gives none, and missesBilled.","repeatFree":"On a call that costs units: how long after you pay for a company you can get it again free on this plan. On a flat fee with a daily or monthly limit: how long after you get a company you can get it again without using up the limit. From the provider's pages: \"20 minutes\", \"no limit\" when the provider never charges again for a company you paid for once, or \"never\" when they say they charge every repeat. Blank when its pages don't say.","per":"The price counts a \"call\", which asks for one company, or a \"result\", each company a call returns. Some calls return a page of results: a post's comments, reactions or reposts, a person's or company's posts, a person's articles, comments or reactions, a company's open jobs, the people, companies, jobs or posts a search finds, or people, companies or jobs similar to the one you send. \"result\" counts each one. \"page of 50\" counts each page, and you pay for a whole page even when it holds fewer than 50. resultsPerPage is the most a page holds, or null. \"page, size not stated\" means the provider doesn't say how many a page holds.","resultsCap":"For a search API, the most results you can get from one search on this plan, however many pages you ask for. \"no limit\" when the provider says you can get every match. Blank (null in the JSON) when the provider's docs don't say, or when the API isn't a search.","startPerCall":"Dollars you pay once for each call, on top of its price per company, like an Apify Actor's start fee. You pay it once for a call of 1,000 companies or a call of one. We leave it out of the $ per 1,000. $0.00 on a free plan, and blank when the plan charges none.","extras":"Fields that cost more. Each has its fields and its perThousand on top of the row's.","Also pays for":"The other calls you get for the plan's price, each with its own limit, in the provider's words. We leave out apps, extensions, MCP servers, proxies and storage, and what you can do only in the provider's app, like sending its email campaigns: they are not calls. For an account's price, gtm-api.com also gives you 100 searches, 50 messages and 25 connection requests a day. \"nothing\" when you get only the company call. The row's $ per 1,000 is for the company call alone, since no provider says how to split its price. Blank (null in the JSON) until we read the provider's plan, and on a \"contact\" plan whose pages don't say what its price buys, like its Pay.","overagePerThousand":"On a subscription: dollars for 1,000 companies past the plan's units, when the provider sells them.","addons":"On an email API's subscription: the packs of units the provider sells on top of the plan, as its pricing page lists them. Each has its units, its pay in the plan's currency, when it renews (\"month\" or \"year\" when you pay for it again with the plan, \"never\" when you buy it once), and its perThousand, dollars for 1,000 emails at its price. The sheet's CSV says \"500 credits a month for $10 ($20.00 per 1,000)\". An empty list when the provider sells none. Blank (null) on every other plan.","catchAllPerThousand":"On an email API: dollars for 1,000 calls that return an address at a catch-all domain. Such a domain takes mail for any address, so you can't check whether the person's mailbox exists, and the email may bounce. 0 when they cost nothing, or when the provider returns no such address. The same as the row's $ per 1,000 when the provider charges for any address it finds. Blank when its pages don't say.","bounceRefund":"On an email API: the credit or refund the provider gives when an address it charged you for bounces, and the conditions, in its pages' words, like \"the credit, reported from the dashboard or the API and reviewed\". \"never\" when its pages say a bounced address stays charged. Blank when they don't say.","pitch":"How the provider sells the row's call, quoted from the call's own page, or the provider's own pitch when one page covers all its calls. \"[...]\" marks a cut.","freshness":"How old the answer may be, from the provider's pages. \"live\": the provider reads LinkedIn, the company's website or its job board, or finds or checks the email or phone number, when you call. \"1 month\" or \"30 days\": the provider answers from a copy it refreshes that often. \"as of 2025-11-13\": from a copy last refreshed that day. \"stored\": from a copy the provider's pages don't date. Blank (null in the JSON) when its pages don't say. When a plan's Freshness says the provider answers from a copy, the plan is on its API's cached sheet, if that API has one: Cached LinkedIn profiles, Find cached email, Cached LinkedIn company profiles, Cached company headcount, Cached company enrichment, Cached people search, Cached company discovery and Cached company funding. You find the other plans on their API's own sheet. In brackets, we list the fields whose freshness differs on the provider's pages. fieldFreshness gives each of them its own freshness. Bright Data's LinkedIn profile is \"live (current title, jobs, schools: as of 2025-11-13)\", since LinkedIn put those three behind its login wall and Bright Data serves them from its cache.","history":"How far back the answers reach, on an API whose answers are dated, such as a company's funding rounds or its open jobs. \"since 2016\": back to 2016. \"open only\": only what is open now. \"the last 7 days\": a window that ends today. \"no limit\": every one ever. \", closed only\" after it: the closed ones alone. Blank (null in the JSON) when the provider's pages don't say, or when the answers aren't dated.","keep":"How long the provider's terms let you keep its API's answers. \"no limit\" when they set none. \"no API terms\" when the provider has no API terms.","use":"What the provider's terms let you use its API's answers for, and what they ask in return, like a link back or a credit. \"any\" when they limit nothing and ask nothing. \"no API terms\" when the provider has no API terms.","pay":"The plan's price, in its currency. On a subscription, it covers the months in termMonths, and the sheet's CSV writes those months after the price: \"$39.00/month\", \"€99.00/month\" on a plan in euros, or \"$468.00/15 months\" on gtm-api.com's yearly plan. On a pack, it covers the pack. $0.00 on a free plan. Blank (null in the JSON) on a top-up when the provider lists no minimum. On a usage tier, your monthly cost before you reach the tier: the lower tiers' calls at their own prices, such as $583 before Crawlbase's next 10M requests, or the tier's minimum if higher. On a pay-as-you-go plan, the sheet's Pay column shows Charged.","units":"What the plan gives for its price, counted in unit. On a usage tier, where the tier starts: \"from the 51st call a month\".","calls":"The number of companies you get for the plan's price, counted in per. A call and a result are each one company. On a plan that charges by the page, the number of pages. calls is the number the plan's units pay for: \"100 calls, once\" for a free trial, \"1,250 results a month\" for an allowance. monthlyCap is for a call that costs 0 units, like a flat fee: the most companies you get a month, or \"no limit\". With a daily or monthly call limit, monthlyCap is that limit over 30 days: 90,000 for 3,000 calls a day, which Enough for shows as \"90,000 calls a month\". Enough for shows calls, or monthlyCap when a row has no calls. It is blank, with null in both, when the provider doesn't say how many you get or a waterfall's average call costs nothing.","expires":"When the units you don't use lapse, in the provider's words: \"never\", \"365 days\", \"at renewal: unused credits do not carry over\". Blank when its pages don't say.","perDay":"The most calls a day.","perSecond":"The most calls a second you can keep up. When the provider counts a limit over a longer window, we divide it: a limit per minute by 60, per 5 minutes by 300, per hour by 3,600. When it sets several, we show the tightest: 25 a second and 40 a minute is 0.67. We round it to two decimals, and a rate under 0.1 to two digits past its zeros: 5 an hour is 0.0014.","concurrent":"The most calls running at once, or \"no limit\". \"n/a\" when the provider sets no cap on calls at once but limits them by the second: its \"Per second\" limits you. Blank (null) when the provider's pages don't say.","batch":"The most companies one call takes on this plan. 1 when it takes one at a time. \"no limit\" when the provider says a call takes any number. Blank (null) when a call takes a list and the provider's pages don't say how long.","answer":"How the call's answer comes back. \"in the call\" when its response holds it. \"by polling or webhook\" when the call returns a job, and you get the company from another call once the job is done, or at your webhook. \"in the call or by polling\" when the call answers if the result is ready in time, and otherwise hands back a job to call for later, like an Apify Actor past 5 minutes. \"in the call or by webhook\" when you choose in your request. \"by polling\" when only another call reads it, \"by webhook\" when only a URL you give gets it. Blank (null) when the provider's pages don't say.","latencyMs":"The median time a call takes. If we benchmarked the row's call, we show our benchmark's median, as in its API's benchmark columns: each call's time minus the mean time of three free calls to the same provider before it. If that mean is longer than the call, we use the provider's median baseline, capped at the call's time, so no time is below zero. For other rows, it is the time the provider's pages give, or one we measured when we added the row. Blank (null) when we have neither. Milliseconds in the JSON and datacircle.csv, seconds on the sheet and in its CSV.","send":"What you give the call: a company's LinkedIn URL, domain or ID. The call needs the inputs before \"Optional:\". The optional ones come after it, or after a semicolon in the CSV and the JSON.","method":"The call's HTTP method.","path":"The call's path, as in the provider's docs: the same on each plan of a call, unless the provider serves a plan at its own address.","plan":"The plan, as the provider names it on its pricing page.","who":"Who the provider offers the plan to: \"anyone\", or the condition its pages set, like \"anyone with a work email\" or \"on approval of an application\".","readFrom":"The pages we read the row's values from. They are the sheet's last column: click a cell to see each page, or press ⌘C to copy them all."},"billed":{"free":"Free: nothing to pay","on-demand":"Nothing to buy first: you pay as you go","one-time":"You pay first for a pack of credits, then spend them on calls","contact":"No public price: you ask the provider for one","monthly":"A monthly subscription","quarterly":"A quarterly subscription","half-yearly":"A subscription for 6 months","yearly":"A yearly subscription"},"defaults":["No contact us plans","No free plans","No yearly plans","$500 or less to start"],"kept":5,"paid":{"ranked":{"Cached company headcount":[0.0998,0.495,1,2.9,3.7,4.76,5.41,8.33,10,11.96,19.6,23.9992,26.3992,29.9,59.952,79.6,99,100,142.5714,165.8333,196]},"bench":{"Cached company headcount|The Swarm|/v3/companies/fetch":{"data":0.45,"performance":1,"median":100,"measured":7,"fastest":"The Swarm","fastestMedian":100,"fastestMeasured":7,"called":20,"inputs":20,"fewer":false,"days":["2026-10-20"],"row":"The Swarm"}}},"alert":true,"bench":{"groups":[{"name":"Headcounts checked","note":"We called each provider once on the same 20 companies, on 20 October 2026. Time is each call minus a baseline, so the distance to the provider's servers drops out. We asked for the number of people who work at each company, by its LinkedIn page, and read that page's own count. Right count: within 10% of it, or one person at a company of under 10. Another count: further off. No count: the call gave none.","columns":[{"name":"Right count","kind":"count","values":{"The Swarm":[9,20]}},{"name":"Another count","kind":"count","values":{"The Swarm":[2,20]}},{"name":"No count","kind":"count","values":{"The Swarm":[9,20]}}]},{"name":"Time per company","note":"Each call's time minus its baseline, over every company we searched. The baseline is the mean of three free calls to the same provider just before the call, on the same connection. If that mean is longer than the call, we use the provider's median baseline, capped at the call's time, so no time is below zero.","columns":[{"name":"Median","kind":"ms","values":{"The Swarm":7}},{"name":"10th percentile","kind":"ms","values":{"The Swarm":3}},{"name":"90th percentile","kind":"ms","values":{"The Swarm":35}},{"name":"Fastest","kind":"ms","values":{"The Swarm":0}},{"name":"Slowest","kind":"ms","values":{"The Swarm":87}},{"name":"Baseline","kind":"ms","values":{"The Swarm":219}}]},{"name":"The headcount call","note":"The provider's company headcount call, by the company's LinkedIn page, with no options, and what one company cost on this run.","columns":[{"name":"Call","kind":"text","values":{"The Swarm":"POST bee.theswarm.com/v3/companies/fetch"}},{"name":"Charged per company","kind":"text","values":{"The Swarm":"$0.099, nothing when not found"}}]}]}}