# Detect Buying Signals Across Jobs, Funding, and LinkedIn with a Scheduled Pipeline

> Watch three buying-signal sources on a schedule, jobs, funding rounds, and LinkedIn posts, and append new deduplicated companies into a leads.csv with evidence URLs.

- URL: https://www.automongo.com/automations/buying-signals-with-claude/
- Summary: Scheduled Apify + Claude pipeline that surfaces companies showing buying intent.
- Tools: Claude
- Difficulty: Advanced
- Category: Sales
- Tags: buying-signals, lead-generation, apify, prospecting, intent-data
- Published: 2026-10-28
- External resource: https://github.com/apify/awesome-skills/blob/main/skills/apify-buying-signal-detection/SKILL.md

## How It Works

The skill turns an ICP description into a recurring pipeline that surfaces companies showing buying intent across three signal types: job postings (hiring for the persona), fundraising events (recent raises), and LinkedIn content (pain-point posts, hiring announcements). A split-schedule architecture runs Apify Actor Tasks on their own cron, then a Claude-side aggregator normalizes, deduplicates against a blacklist, and appends new rows to a single `leads.csv`. The output carries one row per company with the signal source, evidence URL, and detection timestamp, ready to pipe into a CRM.

### Setup Steps

1. **Collect ICP Inputs**: Gather the campaign name, signal subset, geo list (ISO country codes), industry keywords, persona titles, funding stages, and LinkedIn search phrases before any file is written.
2. **Write icp.json and Blacklist**: Create the campaign directory, drop in `icp.json` with the ICP config, add an optional `blacklist.csv` (columns: domain, company, reason), and seed an empty `leads.csv` with the header row.
3. **Provision Apify Tasks**: Run `python scripts/setup_apify_tasks.py --config ./icp.json`. The script picks global and regional Actors from the routing table, upserts one Apify Task per Actor, and creates a single Apify Schedule on the Apify-side cron.
4. **Verify Picks in Apify Console**: Filter tasks by the campaign prefix in console.apify.com, confirm the right regional Actors fired for your geos, inspect each task's input JSON, and check that the schedule is enabled.
5. **Register Claude-Side Aggregation**: Create a scheduled task through the local `scheduled-tasks` MCP, or an OS cron, GitHub Actions workflow, or Task Scheduler entry, that runs `python scripts/aggregate.py --config ./icp.json` on the Claude-side cron.
6. **Run Once Manually**: Execute `aggregate.py` by hand to seed the week guard and sanity-check the pipeline. Expect a summary JSON with per-signal counts and the number of new rows appended.

### Skill Capabilities

- **Signal Routing**: Picks global and regional Apify Actors per geo for jobs (Bebity LinkedIn Jobs, Google Jobs, Indeed, Stepstone, Seek, France Travail), funding (Nexgendata, Memo23 Crunchbase, SignalBase, Maddyness for FR), and LinkedIn content (HarvestAPI post search, with a cookie-based deep-scrape fallback).
- **Task Provisioning**: `setup_apify_tasks.py` upserts Apify Actor Tasks named `<campaign>-<actor-slug>` with input payloads derived from `icp.json`, and creates one Apify Schedule that fires every task on the chosen cron.
- **Decoupled Schedules**: Apify runs the Actors on its own cron; Claude runs the aggregator on its own cron. The runner that triggers Claude does not need to be awake when the Actors fire.
- **Weekly Idempotency**: The aggregator exits early with no HTTP calls when `leads.csv` already carries an entry for the current ISO week, so the Claude schedule can safely fire more often than weekly.
- **First-Seen-Wins Dedup**: A company first surfaced by the jobs signal stays a jobs lead even if the same company appears later in the funding feed, so the strongest early signal is preserved.
- **LinkedIn Domain Enrichment**: Two-hop chain (HarvestAPI profile scraper, then HarvestAPI company scraper) resolves LinkedIn author posts to a company domain, so blacklist and dedup can apply to LinkedIn-sourced leads too.
- **Blacklist Filtering**: Rows matching either an exact domain or a normalized company name in `blacklist.csv` get dropped before append.
- **Troubleshooting Flags**: `--dry-run` prints what would be appended without touching the CSV; `--force` bypasses the weekly guard during calibration.

### Benefits

- **Hands-Off Lead Discovery**: The scheduled pipeline keeps surfacing companies without an operator triggering runs each week.
- **Evidence-Linked Rows**: Every row carries the signal source, source Actor, signal date, and evidence URL, so the sales team can read the trigger before reaching out.
- **Three Intersecting Signals**: Watching jobs, funding, and LinkedIn content together surfaces companies that look expensive to reach on any one source alone.
- **Cost-Controlled**: Canonical profile URL dedup, company-URL dedup at the enrichment hop, and skipping enrichment when every row already carries a domain cap the LinkedIn spend.
- **CRM-Ready Output**: `leads.csv` lands in a shape that pipes straight into an outbound tool, with no reshaping between pipeline and CRM import.

### Advanced Features

- Split-schedule architecture with independent Apify and Claude crons.
- Weekly idempotency guard on the aggregator so safety-net runs never over-append.
- Two-hop LinkedIn author to company domain enrichment with canonical-URL dedup at each hop.
- Regional Actor routing based on the ICP's geo list (Stepstone for DE/AT/BE, Seek for AU/NZ, France Travail for FR, Maddyness for FR funding).
- Blacklist filter applied at aggregation time by domain or normalized company name, with a per-row drop reason recorded in the summary counters.

### Use Cases

- SDR teams building a weekly outbound list from hiring, funding, and LinkedIn pain-point signals.
- Growth marketers monitoring an ICP for intent before launching a nurture sequence.
- RevOps teams piping deduplicated signal rows into Salesforce or HubSpot as a top-of-funnel source.
- Agencies running signal-based prospecting for multiple client ICPs with per-campaign directories.
- Founders tracking competitor hiring and funding to time partnership or displacement plays.
