USE_CASE_ID: icp_outbound_prospecting NAME: ICP-based outbound prospecting CATEGORY: Outbound prospecting The user has an Ideal Customer Profile (ICP) defined by firmographics (industry, headcount, geography, optionally tech stack) and a target role. They want a list of verified contacts at matching companies, enriched and pushed into an outreach sequence — starting from zero, with no existing list. For routing, file structure, and cross-cutting principles, see https://floqer.com/docs/use-case-catalog.txt. This file does not repeat them. INDEX: 1. When to use / when not to use 2. Inputs 3. Outputs 4. Workflow design 5. Implementation 6. Best practices 7. Common variations 8. Failure modes and mitigations 9. Related use cases ================================================================================ 1. WHEN TO USE / WHEN NOT TO USE ================================================================================ USE WHEN: - The user is starting cold (no existing list of accounts or contacts). - The ICP can be expressed in firmographic filters (size, industry, geo, tech stack). - The target persona is a defined role (e.g. "Head of RevOps at Series B SaaS in NA"). DO NOT USE WHEN: - The user already has a list of companies — skip the discovery stage and jump straight to people enrichment. - The trigger is an external intent signal (hiring, social activity, web visit) — see Intent-driven outreach category. - The user wants to enrich existing CRM contacts — see CRM hygiene category. ================================================================================ 2. INPUTS ================================================================================ - ICP firmographic filters: industry, headcount range, geography, optional tech stack. - Target role(s) at the company, with seniority where relevant. - Outreach destination: a connected sequencing tool. One of: smartlead, instantly, lemlist, outreach, salesloft, reply, reachinbox, heyreach, salesforge, plusvibe. - Optional: exclusion list (current customers, do-not-contact, churned accounts). ================================================================================ 3. OUTPUTS ================================================================================ - A list of verified contacts (email, LinkedIn, role, company) pushed into the chosen sequencing tool. - A Floqer table snapshot of the same list for audit and re-use. ================================================================================ 4. WORKFLOW DESIGN ================================================================================ High-level conceptual stages: 1. Define candidate companies — translate ICP filters into a company list. 2. Filter and cap — apply hard filters and trim to a sensible volume before any paid enrichment runs. 3. Find target-role employees at each company. 4. Enrich verified work email for each contact. 5. Dedupe against the user's exclusion list and existing CRM. 6. Push to outreach sequence with the right field mapping. 7. Persist the final list to a Floqer table for audit and reuse. ================================================================================ 5. IMPLEMENTATION ================================================================================ STAGE 1 — Define candidate companies Action: floqer_company_firmographics (preferred), or get_employees_by_company_using_apollo filtered to companies as a fallback. Why: Floqer firmographics is native and cheaper. Apollo is a fallback when a needed filter is unsupported. STAGE 2 — Filter and cap Action: filter, then csv_to_structured_array_format with a hard cap (e.g. 500). Why: Hard cap before any per-row paid action — see cross-cutting principle 2 in the catalog. STAGE 3 — Find target-role employees Action: get_employees_by_company_using_floqer_native (preferred) or get_employees_by_company_using_apollo. Why: Apply role + seniority filters here, not later. STAGE 3 (alternative for under-indexed ICPs) — Web-agent fan-out Action: llm_web_agents (Floqer Deep or Parallel Core) returning a single-field raw_array of people, piped through raw_to_structured_array -> push_data_to_sheet. Why: Small, fragmented, or non-tech segments — independent shops, family businesses, government contractors, regional service providers, anything below ~50 headcount outside tech — have thin or absent coverage in Apollo and Floqer Native. Dedicated finders return "No data found" for many such companies, which errors the action and halts the row's chain (see section 8 failure modes). The web agent reads company websites, Companies House, news, YouTube, and other sources B2B databases don't index, and applies size-tiered title logic in the prompt itself rather than across multiple chained finder actions with mutually exclusive run_if conditions. Mission shape: instruct the agent to return up to N most-senior matches with full_name, person_title, and a flagship LinkedIn URL; embed size branching in natural language ("if headcount < 50, find founder/owner/MD; if 50+, find sales/BD director"). See llm_web_agents.txt section 8 for the raw_array output pattern and the strict JSON formatting rules required to keep raw_to_structured_array parsing. Heuristic: prefer this path when the target list is small, fragmented, or under-indexed in standard B2B databases — independent shops, family businesses, government contractors, regional service providers, anything below ~50 headcount in non-tech verticals. Reach for get_employees_by_company_using_floqer_native / get_employees_by_company_using_apollo when targeting tech companies, mid-market and up, or any segment with dense LinkedIn coverage. STAGE 4 — Enrich verified work email Action: person_work_email_waterfall, then verify with one of person_work_email_verification_by_neverbounce, person_work_email_verification_by_million_verifier, person_work_email_verification_by_zerobounce, or person_work_email_verification_by_allegrow. Why: Always verify after enrichment — see cross-cutting principle 3. STAGE 5 — Dedupe Action: auto_dedupe_rows against an uploaded exclusion list, or lookup_another_floqer_workflow_row against a CRM-backed sheet. Why: Idempotency — see cross-cutting principle 6. STAGE 6 — Push to sequence Action: One of smartleads_add_to_campaign, instantly_add_to_campaign, lemlist_add_lead_to_campaign, outreach_add_to_sequence, salesloft_add_to_cadence, reply_add_and_push_to_campaign, reachinbox_add_to_campaign, heyreach_add_leads_to_campaign, salesforge_add_to_sequence, plusvibe_add_to_campaign. Why: Match to the user's connected tool. Field mapping at minimum: email, first_name, company. STAGE 7 — Persist Action: push_data_to_another_floqer_workflow. Why: Audit + reuse for follow-up campaigns. DATA PASSING: Carry company_name and company_domain on the row from stage 1 onward so personalization works downstream. Reference upstream outputs as {{action_instance_id.field_name}} or, for structured arrays, {{action_instance_id.list_name.column_name}}. See concepts.txt section 5. ================================================================================ 6. BEST PRACTICES ================================================================================ - Cap before enrich. Always insert a filter + cap step before stages 3 and 4. Without it, a wide ICP can run thousands of paid calls. - Verify after enrichment, every time. Unverified emails harm domain reputation more than they help open rates. - Dedupe before push, not after. Pushing duplicates into the sequencing tool causes silent merges or contact-limit overages. - Carry company context through every stage. Keep company_name and company_domain on the row so personalization works downstream. - Snapshot the list. Persisting to a Floqer table at the end makes follow-up campaigns and reporting trivial. ================================================================================ 7. COMMON VARIATIONS ================================================================================ - Add personalization: insert llm_web_agents (Web Agent) for research, then llm_models (AI Generate Content) for writing, in that order, between stages 5 and 6 to draft a per-contact opener. The web agent gathers context only (recent news, LinkedIn activity, company signals, mutual connections, recent hires); the LLM uses that context to write the opener. Keep these as separate actions — never conflate them. Web agent does research, not writing. LLM does writing, not research. - Add intent gate: insert a hiring-signal or LinkedIn-content-activity filter after stage 1 so only companies showing intent advance. - Multi-persona: run stage 3 once per role and union with merge_employee_finder_structured_array before stage 4. - Sample-first: for unfamiliar ICPs, run with a cap of 25 and review before scaling up. ================================================================================ 8. FAILURE MODES AND MITIGATIONS ================================================================================ - ICP too broad → cost spike. Mitigation: enforce stage 2 cap; warn the user if pre-filter company count exceeds 5,000. - Low email find rate. Mitigation: fall back from person_work_email_waterfall to personal_email_by_linkedin_url_waterfall only with explicit user approval. Personal email outreach has different deliverability and compliance implications. - Sequencing tool field mismatch. Mitigation: use a data-formatter action to align field names before push. - CRM dedupe miss. Mitigation: dedupe on (email + LinkedIn URL), not email alone — different people can share an old work email after job changes. - Dedicated finder (Apollo / Floqer Native) returns "No data found" -> halts the row's chain, no output for that company. Mitigation: for under-indexed segments (sub-50-headcount, non-tech, regional service providers, family businesses, government contractors), use the web-agent fan-out path described in STAGE 3 (alternative) instead. The dedicated finders' coverage gap on these segments is structural, not a transient error — retrying the same finder won't help. ================================================================================ 9. RELATED USE CASES ================================================================================ - Intent-driven outreach — same shape, different trigger. - CRM hygiene → enrich missing emails — reuses stages 4 + 5 against an existing CRM list. - Research and scoring → ICP fit score — can replace stage 2's hard filter with a model-derived score threshold. ================================================================================