ACTION_ID: floqer_company_firmographics NAME: Floqer: Company Enrich CATEGORY: Account Level Enrichment CREDITS: 1 Enrich a company with a single firmographics pull — name, business description, HQ + per-country locations, industry classifications (NAICS / SIC / LinkedIn), employee range, revenue range, founded year, company type, and stock ticker. The cheapest source for a **revenue range** signal in the catalog. Compared to other company enrich actions: - vs People Data Labs (CREDITS: 5) — covers the same standard firmographics (name, range-bucketed headcount, revenue range, industry, HQ, founded year, type) at 1/5 the cost. PDL adds workforce-trend signals (employee churn / growth rates, headcount by month, gross hires/departures), per-department headcount, funding-history depth, and corporate-structure (parent / subsidiaries). Reach for this action when standard firmographics + revenue band are sufficient; reach for PDL when workforce dynamics or corporate structure are the point. - vs Scrape Company LinkedIn Profile (CREDITS: 0.2) — LinkedIn scrape returns the same headcount band and similar HQ data for less, but does NOT return a revenue range. Use the LinkedIn scrape for cheap headcount-only gates; use this action when you need revenue. INDEX: 1. Inputs 2. Outputs 3. How to configure 4. Key notes 5. Where it fits in a workflow 6. When to use 7. When not to use ================================================================================ 1. INPUTS ================================================================================ company_name (type: string, optional) — Company Name Plain company name (e.g. "Salesforce"). company_domain (type: string, optional) — Company Domain Company domain (e.g. "salesforce.com"). Most reliable single identifier — prefer it when available. company_linkedin_url (type: url, optional) — Company LinkedIn URL Company LinkedIn /company/ URL. company_crunchbase_url (type: url, optional) — Company Crunchbase URL Crunchbase profile URL when available; helps disambiguate same-name companies. country_code (type: string, optional) — Country Code ISO 3166-1 alpha-2 country code (e.g. "US", "GB"). Disambiguates same-name companies across regions. At least one identifier (name + domain, or LinkedIn URL, or Crunchbase URL) must be provided. Passing several increases match confidence. ================================================================================ 2. OUTPUTS ================================================================================ business_id (type: string) — Business ID Internal identifier for the matched company. company_name (type: string) — Company Name Official company name. business_description (type: string) — Business Description Detailed description of the company's business. website (type: url) — Website Company website URL. country (type: string) — Country Country where the company is located. region_state (type: string) — Region / State Region or state name. city (type: string) — City City name. street_address (type: string) — Street Address Street address. zip_code (type: string) — Zip Code Postal / ZIP code. naics_code (type: string) — NAICS Code North American Industry Classification System code. naics_description (type: string) — NAICS Description Description of the NAICS classification. sic_code (type: string) — SIC Code Standard Industrial Classification code. sic_description (type: string) — SIC Description Description of the SIC classification. stock_ticker (type: string) — Stock Ticker Stock ticker symbol if publicly traded. employee_range (type: string) — Employee Range Headcount band (e.g. "100-500"). revenue_range (type: string) — Revenue Range Yearly revenue band (e.g. "$10M-$50M"). Useful for size-tier ICP filtering. The exact format varies by source — see KEY NOTES for the lower-bound parsing recipe used in Wise-style "revenue >= $1M" gates. linkedin_industry (type: string) — LinkedIn Industry Industry category from LinkedIn. company_linkedin_url (type: url) — Company LinkedIn URL LinkedIn company page URL. company_logo (type: url) — Company Logo URL to company logo image. company_locations (type: raw_array) — Company Locations Distribution of company locations by country (count of offices / employees per country, depending on source). hq_location (type: string) — HQ Location Headquarters location, free-form. hq_country (type: string) — HQ Country Headquarters country. year_founded (type: string) — Year Founded Year the company was founded. company_type (type: string) — Company Type Type of company (e.g. "Private", "Public"). ================================================================================ 3. HOW TO CONFIGURE ================================================================================ Configure Action body (PATCH /api/v1/workflows/{workflow_id}/sheets/{sheet_id}/actions/{action_instance_id}): { "inputs": { "company_domain": "{{input.company_domain}}", "company_linkedin_url": "{{input.company_linkedin_url}}", "company_name": "{{input.company_name}}" } } Field-by-field: - company_domain Preferred single identifier when available. - company_linkedin_url Backup identifier; also useful for disambiguating same-domain entities. - company_name Plain name; pass alongside domain or country_code to nudge disambiguation. - company_crunchbase_url Optional; helps when domain alone is ambiguous. - country_code Optional; ISO alpha-2. ================================================================================ 4. KEY NOTES ================================================================================ - This action is the cheapest source of a revenue range in the catalog (PDL is ~5x the cost; LinkedIn scrape has no revenue). Use it as the revenue gate in ICP qualification pipelines. - Revenue range parsing for downstream gates. `revenue_range` comes back as a string in the form `"$-$"` (or `"$+"` for the top band), with units B/M/K. To gate on a numeric threshold like "revenue >= $1M", parse the lower bound in a format_data_using_js_expression step: (() => { const raw = String("{{.revenue_range}}" || "").trim(); if (!raw) return "0"; const u = c => ({b:1e9, m:1e6, k:1e3}[String(c).toLowerCase()] || 1); const m = raw.match(/\$?\s*(\d+(?:\.\d+)?)\s*([bmkBMK])?/); if (!m) return "0"; return String(Math.round(parseFloat(m[1]) * u(m[2]))); })() Then add a sentinel formatter that returns `"yes"` / `"no"` based on the threshold and gate via `filter` on `is "yes"` — numeric operators silently fail on JS-formatter outputs (see /docs/action-detail/format_data_using_js_expression.txt §4). - Standard firmographics; not workforce dynamics. This action returns size + industry + HQ + revenue + founded + type bands. It does NOT return headcount-by-month, employee churn / growth rates, per-department headcount, or funding-history depth — use `company_enrich_using_people_data_labs` when those signals are the point. - `revenue_range` and `employee_range` are bands, not exact numbers. For ICP gates this is usually fine; for precise thresholds, gate on the lower or upper bound depending on whether you want to be conservative or generous. The Wise Business pattern (gate on lower bound >= $1M) is conservative: a company in the "$0-$1M" band will fail, "$1M-$5M" will pass. - ⚠ Data quality is uneven for small / non-US-or-UK companies. Observed in production on a list of Estonian startups: the action matches the right entity (business_description and linkedin_industry come back correct) but several scalar fields (`company_name`, `hq_location`, `hq_country`, `year_founded`, `company_type`) come back empty, AND `revenue_range` returns what looks like a default band ("5M-10M") on companies that almost certainly don't actually sit in that band — e.g. an early-stage healthtech with a publicly disclosed €354k forecast turnover got back the same "5M-10M" as a $5.5M-revenue medtech. Treat the revenue band as soft signal for companies headquartered outside the US/UK/large-EEA economies; cross-check against `company_enrich_using_people_data_labs.estimated_revenue` (5 credits) or web-agent revenue extraction when the gate decision must be reliable. For US-targeted ICPs the coverage is much better — the cheap path is fine. ================================================================================ 5. WHERE IT FITS IN A WORKFLOW ================================================================================ UPSTREAM Company-identifier inputs from a CSV upload, a Salesforce / HubSpot lookup, an enrich_company_linkedin_profile step that resolved a domain, or any other source that gives you a `{{input.company_domain}}` (or linkedin_url). THIS ACTION Pulls standard firmographics + revenue band in a single call. DOWNSTREAM - Revenue-threshold gate: format_data_using_js_expression (parse lower bound) -> sentinel formatter (>= threshold yes/no) -> filter. - Industry-classification gate: filter on `linkedin_industry` or `naics_description` contains / does not contain. - Size-tier branching: filter on `employee_range`. - Synthesis in a downstream format_data_using_js_expression that joins the firmographics into a one-row summary. Pattern (ICP qualification with revenue gate, Wise-style): input -> enrich_company_linkedin_profile (cheap headcount band gate) -> filter (employee_headcount >= 5) -> llm_web_agents (jurisdiction + industry exclusion) -> format_data_using_js_expression (qualification verdict) -> filter (verdict == "yes") -> floqer_company_firmographics (revenue range, this action) -> format_data_using_js_expression (parse revenue lower bound) -> format_data_using_js_expression (sentinel: lower_bound >= $1M ? "yes" : "no") -> filter (sentinel == "yes") -> llm_web_agents (buying signals) -> format_data_using_js_expression (final output synthesis) ================================================================================ 6. WHEN TO USE ================================================================================ Use floqer_company_firmographics when: - You need a revenue band for ICP qualification (PDL is 5x the cost for the same field). - You want a single inexpensive enrich call returning standard firmographics + industry classifications (NAICS, SIC, LinkedIn industry) + headcount band + founded year. - You want to disambiguate companies by combining domain + LinkedIn URL + country code. ================================================================================ 7. WHEN NOT TO USE ================================================================================ Need workforce-dynamics signals (employee churn rate, growth rate, hires-by-month, headcount by department / country) or funding-history depth or corporate-structure (parent / subsidiaries) -> company_enrich_using_people_data_labs (/docs/action-detail/company_enrich_using_people_data_labs.txt) PDL returns the deeper workforce + structure signals; this action is firmographics-only. Need only headcount + HQ (no revenue), at a lower cost -> enrich_company_linkedin_profile (/docs/action-detail/enrich_company_linkedin_profile.txt) LinkedIn scrape at 0.2 credits returns headcount, HQ, industry, founded year — but no revenue range. Need tech-stack signals (technologies the company uses) -> company_tech_stack_enrichment_using_their_stack (0.3 credits) OR company_tech_stack_floqer (1 credit, departmental buckets) OR company_tech_stack_enrichment_from_builtwith (2 credits, broadest raw coverage). Need per-country headcount distribution only -> company_headcount_distribution_by_country (1 credit) — returns `company_headcount_by_country` only, no other firmographics. ================================================================================ This file is maintained manually. Last updated: 2026-05-19. Full interactive reference: https://floqer.com/docs/reference-static Action catalog: /docs/action-catalog.txt