Weekly LinkedIn lead pipeline into HubSpot
Every Monday morning, scrape fresh LinkedIn prospects matching your ICP, dedupe against HubSpot, log the new ones with a fit note, and post a digest to Slack.
Build me a weekly LinkedIn lead generation pipeline that drops qualified prospects straight into HubSpot. The workflow should run on a cron trigger every Monday at 8am in my local timezone (let me set the timezone when I configure it).
Inputs I want to configure on the prompt:
1. The Apify Actor slug to run (default to a LinkedIn company or people scraper like apify/linkedin-company-scraper or get-leads/linkedin-scraper, but let me override it because every LinkedIn Actor has a different input schema). 2. The raw input JSON for the Actor (search queries, company URLs, filters — whatever that specific Actor expects). 3. My ICP definition in writing: target industries, headcount range, geographies, target titles, and keywords that signal a fit. 4. The HubSpot lifecycle stage to set on new contacts (default to "lead"). 5. The Slack channel ID for the digest.
Each Monday at 8am, the agent should:
Step 1. Call Apify "Run Actor Synchronously and Get Dataset Items" with the configured Actor slug and input JSON. Set a generous timeout because LinkedIn scrapes can take a few minutes. Read the returned dataset items (these are LinkedIn profile and/or company rows).
Step 2. For each row, score it against my ICP. A lead qualifies only if it clearly matches my industry, headcount, geography, and title/keyword criteria. If a row is missing the data needed to judge fit (no company, no title), skip it and record the reason.
Step 3. For every qualifying lead, dedupe against HubSpot before creating anything. Call HubSpot "Search Contacts" filtered by the lead's email (or by firstname + lastname + company if email is missing). If a match exists, skip and record "already in HubSpot". Otherwise call HubSpot "Create Contact" with email, firstname, lastname, jobtitle, company, and lifecyclestage set to the configured value (default "lead"). Also write the LinkedIn profile URL to the contact's linkedin website/social field if the Actor returned it.
Step 4. Immediately after creating each contact, call HubSpot "Create Note" with an association to that contact. The note should be a short fit summary covering: why this person matches my ICP, any LinkedIn signals worth knowing (recent role change, recent posts and topics, company size, hiring, funding, anything else surfaced by the Actor), and the source LinkedIn URL. Keep the note tight, three to five bullets, written for a salesperson skimming it before a cold outreach.
Step 5. At the end of the run, send one Slack digest using Slack Bot "Send a Message" to the configured channel. The message should contain: the total number of new contacts added this week, the top 5 highlights (best fits, written as one-line teasers with name, title, company, and the strongest signal), the number of rows skipped broken down by reason (already in HubSpot, missed ICP, missing data), and a short note if the Apify run returned zero items so I know to check the Actor config.
Error handling: if the Apify run fails or times out, post a single Slack message to the same channel explaining what happened and stop. Don't partially create contacts on a failed run. If a single HubSpot create call fails, log the error in the digest and keep going on the rest.
Use the slackbot integration for the digest (it should post as a bot, not as a person). Use the apify integration for the scrape. Use the hubspot integration for the search, contact create, and note create.
Additional information
What does this prompt do?
- Every Monday at 8am, kicks off a LinkedIn scrape using your chosen Apify Actor and search criteria.
- Filters each scraped person against your ICP (industry, headcount, geography, keywords) and discards the rest.
- Checks HubSpot first so you never get duplicate contacts, then creates the new ones with email, name, title, company, and lifecycle stage Lead.
- Attaches a short fit note to every new contact explaining why they match and any LinkedIn signals worth knowing.
- Posts a Monday morning digest to your sales Slack channel with the count of new leads, the top five to call first, and any rows that were skipped with the reason.
What do I need to use this?
- An Apify account with a LinkedIn scraping Actor you have already tested (company or people scraper).
- A HubSpot account where new contacts and notes should land.
- A Slack workspace and the channel where the weekly digest should post.
- Your ICP written down: industries, company size, geographies, titles, and keywords that count as a fit.
How can I customize it?
- Change the day or time the pipeline runs, or the timezone it uses.
- Swap the Apify Actor or its search criteria as your ICP shifts.
- Tighten or loosen the fit rules, and pick which signals (recent role change, post topics, headcount) deserve a callout in the note.
- Pick a different Slack channel or DM for the digest, and change what shows up in the top-five highlights.
Frequently asked questions
Will this create duplicate contacts in HubSpot?
Can I use a different LinkedIn scraper from Apify?
What if no leads pass my ICP filter this week?
Do I need a paid LinkedIn or Sales Navigator account?
Can I change the lifecycle stage on new contacts?
Stop hand-pulling LinkedIn prospects into your CRM.
Connect Apify, HubSpot, and Slack once, and Geni will scrape, qualify, dedupe, and log fresh ICP leads every Monday morning.