Matt Cox — Growth profile
Intent
Section titled “Intent”I’m building a LinkedIn network of marketing and growth leaders at industrial and manufacturing companies. The people I want to connect with run demand generation, content, and revenue marketing inside complex-sale B2B operations — usually small-to-mid-market manufacturers, machinery and equipment makers, industrial chemicals, and adjacent heavy-industry verticals.
They tend to be people who think publicly about how industrial buying actually works (long cycles, engineering buyers, channel partners, trade shows, technical content) rather than generic SaaS-style growth advice. I want connections that lead to substantive conversations and mutual engagement on the platform, not connection-count vanity.
Audience search
Section titled “Audience search”These fields feed harvestapi/linkedin-post-search directly on every run. Edit freely — the audience tool re-reads this section on each invocation.
Search queries (searchQueries)
Section titled “Search queries (searchQueries)”Topics whose posts should surface candidate authors. Mix narrow phrases with broader topic terms so we capture both keyword hits and topical adjacencies.
- “industrial marketing”
- “manufacturing marketing”
- “B2B industrial”
- “industrial growth”
- “industrial demand generation”
- “industrial content marketing”
- “OEM marketing”
- “engineering buyer”
Author keyword filter (authorKeywords)
Section titled “Author keyword filter (authorKeywords)”Boolean expression applied client-side via substring match against author headlines/job titles. Restricts results to authors whose role lives in marketing/growth, regardless of what they happened to post about. The actor’s own authorKeywords field is too strict to be useful — see commit history for why we filter client-side.
marketing OR growth OR "demand gen" OR "demand generation" OR GTM
Industry IDs (authorsIndustryId)
Section titled “Industry IDs (authorsIndustryId)”LinkedIn industry codes from harvestapi’s reference table. The set below covers the core of industrial / manufacturing. Trim entries that surface noise; add adjacent codes if recall is too low.
- 25 — Manufacturing (parent)
- 55 — Machinery Manufacturing
- 135 — Industrial Machinery Manufacturing
- 147 — Automation Machinery Manufacturing
- 901 — Agriculture, Construction, Mining Machinery Manufacturing
- 935 — Engines and Power Transmission Equipment Manufacturing
- 923 — HVAC and Refrigeration Equipment Manufacturing
- 928 — Metalworking Machinery Manufacturing
- 54 — Chemical Manufacturing
- 840 — Fabricated Metal Products
- 807 — Primary Metal Manufacturing
- 1029 — Transportation Equipment Manufacturing
- 146 — Packaging and Containers Manufacturing
Reference table: https://github.com/HarvestAPI/linkedin-industry-codes-v2/blob/main/linkedin_industry_code_v2_all_eng.csv
Geographic policy
Section titled “Geographic policy”Best-effort, applied client-side after Apify returns. The actor doesn’t expose a location filter and only returns the author’s headline (not their profile location), so this filter is a substring match against the headline.
Include keywords:
- United States
- USA
- Canada
- North America
Exclude keywords:
- India
- Bangalore
- Mumbai
- Delhi
- Hyderabad
- Chennai
- Pune
- Pakistan
- Bangladesh
- Philippines
- Manila
- Nigeria
- Lagos
Strict mode: false
(With strict: false, profiles whose headline matches no include keyword are kept by default unless they hit an exclude keyword. Flip to true to require a positive include match. The current setting is permissive because most US/Canada profiles don’t put their country in the headline.)
Time window (postedLimit)
Section titled “Time window (postedLimit)”week
(Daily runs want fresh signal. Bump to month if the candidate pool feels too thin.)
Sort (sortBy)
Section titled “Sort (sortBy)”relevance
Content type (contentType)
Section titled “Content type (contentType)”all
Max posts per query (maxPosts)
Section titled “Max posts per query (maxPosts)”30
(Caps each search query at 30 results. 8 queries × 30 = 240 posts max per run, ~$0.36/run at the actor’s $1.50/1000 rate. Bump up if recall feels thin after a few daily runs.)
Growth cadence
Section titled “Growth cadence”Operational policies that govern the daily workflow — read by the pipeline tools and the daily-brief composer.
Daily caps
Section titled “Daily caps”- Connection requests: 15/day
- DMs: 3/day
(Hard caps in code, not just a guideline. Spread the requests across the day, never burst.)
Active hours
Section titled “Active hours”- 8am - 6pm Mountain Time, weekdays only
(Bounds when Fitzy can DM the rep with prompts and, in Phase 2, when Unipile actions can fire.)
Pre-connect warmup
Section titled “Pre-connect warmup”Default preference: yes. Suggest 1 engagement (comment or reaction) on a target’s content before surfacing the connection request. Override per-person when there’s a reason to skip the warmup (e.g., we already know each other from elsewhere).
Connection note policy
Section titled “Connection note policy”Send a 200-character note with each request. Tone per voice.md §3 Outreach row. Structure: specific reference to their content → one genuine observation → soft opener that invites response without demanding one.
Follow-up DM policy
Section titled “Follow-up DM policy”After acceptance, wait 1-2 days before sending an initial DM. 2-4 sentences. Same Outreach tone, no pitch, no Calendly, no ask for a call in the first message.
Pipeline status reference
Section titled “Pipeline status reference”Documentation of the 5 states. Records flow cold → engaged → requested → connected, with dropped as a terminal off-ramp.
- cold — surfaced via audience scan, no action yet. Default state when a new record lands.
- engaged — touched their content (comment, reaction). Pre-connect warmup. They’re now aware of you (or at least, we know we noticed them with intent).
- requested — connection request sent. Awaiting their response.
- connected — they accepted. In your network. Active vs. quiet is a computed property of
last_touch_at, not a stored sub-status. - dropped — explicitly removed. Won’t be re-surfaced by future audience scans. Tombstoned with a reason field so we remember why. Use cases: declined request, expired request, profile turned out to be wrong fit, manual skip.
stale is a derived flag, not a status: status == connected AND last_touch_at > 14 days ago. The daily brief surfaces stale connections as “people to re-engage” but their stored status stays connected.
Disqualifiers
Section titled “Disqualifiers”Drop a candidate during the judgment pass even if they hit the search filters, when any of these apply:
- Profile is clearly automation / repost-only with no original writing
- Crypto, web3, or DeFi content as the primary output
- AI-bro productivity content (“I asked ChatGPT to…” style) as the dominant output
- Connection collectors (10K+ connections with low original-post engagement ratio)
- The author themselves isn’t in a marketing, growth, demand-gen, revenue, or related commercial role. The most common form of this is HR / Talent Acquisition / recruiters at industrial companies posting hiring announcements for marketing roles. The company is operationally interesting (active vacancy) but the author is not a connection target — they’re hiring for the person we’d want to connect with, they’re not that person.
- LinkedIn influencers whose feed is mostly generic leadership platitudes
- Posts are entirely about their own company’s product without a substantive perspective beyond the pitch
- Cold-outreach service vendors hawking “I’ll book you 50 meetings with manufacturing VPs”
Tone notes
Section titled “Tone notes”What an obviously-good pick looks like:
- Posts substantively about industrial buying behavior, complex sales, or technical content marketing
- Original thinking — not just aggregating other people’s takes
- Engagement quality is decent (comments suggest real conversation, not emoji noise)
- Title is real — VP / Director / Head of Marketing or Growth at an actual industrial company
- Bonus: small-to-mid-market firms (50–1,000 employees). They’re more reachable than F500 brand teams.
Borderline cases:
- Posts good content but only once a month → still worth surfacing; flag the cadence so I know it’s a low-volume connection
- Title is Founder or CEO of a niche industrial firm → fine if their writing lives in the marketing/growth zone
- Works at an agency serving industrial — fine if their content is in-category; less interesting if they’re brand-agnostic generalists
Clear nos:
- Anyone in the disqualifier list above
- People whose only “industrial” signal is one repost; primary content is elsewhere