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.

Agentic Task
ApifyHubSpotSlack BotSalesMarketingLead EnrichmentDaily DigestsResearch & Monitoring
PromptCreate

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.

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.

FAQs

Will this create duplicate contacts in HubSpot?
No. We search HubSpot by email first and skip anyone who already exists, so you only get net-new contacts each week.
Can I use a different LinkedIn scraper from Apify?
Yes. Any Apify Actor that returns LinkedIn profile or company rows works. You pick the Actor and the input search criteria when you set the prompt up.
What if no leads pass my ICP filter this week?
You still get the Monday digest saying zero leads were added, with a list of who was skipped and why so you can adjust the criteria.
Do I need a paid LinkedIn or Sales Navigator account?
Not on the General Input side. It depends on the Apify Actor you choose. Some Actors need a Sales Navigator session, others run on public search results.
Can I change the lifecycle stage on new contacts?
Yes. By default new contacts are created with lifecycle stage Lead. Tell the agent which stage you want and it will use that instead.

Related templates

A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App

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.