SalesTouch Docs

LinkedIn workflows

Reliable SalesTouch MCP sequences for research, conversations, outreach, engagement, and extraction.

The strongest MCP workflows use small, inspectable tool calls. Resolve identities first, mutate second, and verify state after queued or delayed work.

Research a prospect and conversation

  1. Call linkedin_accounts when the account is unknown.
  2. Resolve the member with linkedin_lookup_profile.
  3. Find the thread with linkedin_conversations_search.
  4. Load context with linkedin_conversations_messages.
  5. Ask the agent to summarize the relationship before drafting anything.

Prompt:

Prompt

Look up this profile, find our LinkedIn conversation, read the message history, and summarize the relationship. Do not send anything.

Send to an existing connection

  1. Read the conversation or call lead_status.
  2. Confirm the exact message with the user.
  3. Call linkedin_message with a member target and text.
  4. If SalesTouch requires queueing, retry with queue: true.
  5. Report whether the action was sent or queued.

Invite and follow up after acceptance

Use linkedin_invite_then_message when the follow-up should run only after the invitation is accepted. Provide the target and follow_up_message; the invitation note is optional.

Use lead_status later to inspect invitation acceptance, the persisted follow-up, or queued-message state.

Schedule a LinkedIn action

Add scheduled_for to any message, invitation, invite-then-message, like, comment, or publication. Use an ISO 8601 datetime with a timezone.

SalesTouch persists the request immediately, but never executes it before the requested time. Working hours, account limits, or a LinkedIn cooldown can move the effective scheduled_for later. Explicit schedules take priority over actions queued automatically.

The response distinguishes requested_for from the effective scheduled_for and reports whether the execution event is registered, awaiting_horizon, or pending_retry. Long-term schedules remain durable in SalesTouch until they enter the execution horizon.

Sleeping credential-based LinkedIn accounts reconnect when the action becomes due. Legacy cookie accounts can still require a manual reconnect.

Engage with a post

  1. Resolve ambiguous post URLs with linkedin_lookup_post.
  2. Call exactly one matching action: linkedin_like or linkedin_comment.
  3. Use queue: true when the action cannot run immediately.

Avoid asking the agent to “engage” without specifying the exact action and comment text.

Extract post engagers

  1. Resolve the post with linkedin_lookup_post.
  2. Call scrape_linkedin_post_reactions or scrape_linkedin_post_comments. Comment scraping returns root commenters by default; set include_replies: true only when reply authors are required.
  3. Read the inline preview.
  4. If source_paging.exhausted is false, call scrape_linkedin_post_comments again with the returned source_paging.arguments. This continues LinkedIn extraction from the saved source position and preserves the original include_replies mode after the automatic provider-request safety budget or a recoverable LinkedIn interruption.
  5. Use scrape_result_page with the returned result_id only to page through profiles already stored by that call.
  6. Use the export metadata when the complete dataset belongs outside the agent context.
  • Use scrape_linkedin_search_url when you already have a native LinkedIn Classic people, company, post, or job search URL.
  • Use scrape_linkedin_people_search, scrape_linkedin_companies_search, scrape_linkedin_posts_search, or scrape_linkedin_jobs_search for structured LinkedIn Classic filters.
  • Use scrape_sales_navigator_search_url when you already have a native Sales Navigator people or company URL and want SalesTouch to infer the result type.
  • Use scrape_sales_navigator_people for a Sales Navigator lead search URL or structured people filters.
  • Use scrape_sales_navigator_companies for a Sales Navigator company search URL or structured company filters.
  • Use linkedin_sales_navigator_search_parameters to discover account-specific ids for locations, industries, companies, job titles, and other enumerated filters. Set product: "classic" for LinkedIn Classic; the default remains Sales Navigator for compatibility.
  • Use linkedin_lookup_job_posting after a job search to fetch one complete posting, including optional hiring-team, salary, and benefits sections.
  • Set preview_limit to keep the inline response small.
  • Page stored results instead of requesting the full extraction in one tool call.

Structured filter values accept either a known id or a human-readable query. A query is used automatically only when it resolves to one exact value. If several candidates match, retry with the selected candidate id.

Example: growth hackers in Paris at companies with 1–10 employees:

{
  "filters": {
    "current_job_title": { "include": [{ "query": "Growth Hacker" }] },
    "location": { "include": [{ "query": "Paris" }] },
    "company_headcount": [{ "min": 1, "max": 10 }]
  },
  "limit": 100,
  "preview_limit": 20
}

Example: ESN in Paris, using LinkedIn's IT services industry as the business proxy:

{
  "filters": {
    "industry": { "include": [{ "query": "IT Services and IT Consulting" }] },
    "location": { "include": [{ "query": "Paris" }] }
  },
  "limit": 1000,
  "preview_limit": 20
}

Example: companies in Paris that are hiring:

{
  "filters": {
    "location": { "include": [{ "query": "Paris" }] },
    "hiring_on_linkedin": true,
    "department_headcount_growth": {
      "department": [{ "query": "Engineering" }],
      "min": 1
    }
  },
  "limit": 1000,
  "preview_limit": 20
}

To find people only inside a company result, first call scrape_sales_navigator_companies. Then pass its result_id as company_result_id to scrape_sales_navigator_people, together with people filters such as current_job_title. SalesTouch validates result ownership, expiry, and LinkedIn account, then applies the companies in safe batches.

{
  "company_result_id": "previous_company_result_id",
  "filters": {
    "current_job_title": { "include": [{ "query": "Directeur des ressources humaines" }] }
  },
  "limit": 100,
  "preview_limit": 20
}

Interpret hiring and exhaustiveness correctly

hiring_on_linkedin: true means the company has at least one LinkedIn job posting; it does not prove that the open role is a developer role. Add department_headcount_growth for the Engineering function as an intent signal, or start from a verified job-search dataset when the job title must be exact. “All companies” also means all results exposed by the selected Sales Navigator filters, subject to LinkedIn's result cap; segment broad searches when the warning asks you to narrow them.

“ESN” is not a native LinkedIn company classification. Use IT Services and IT Consulting as the broad industry proxy, then qualify the returned companies from their description or website instead of treating a keyword match as proof.

Cancel queued work or a waiting follow-up

  1. Get the exact identifier from status or lead_status.
  2. Call queue_cancel with exactly one of:
    • queued_action_id to cancel a queued invitation, message, or other action;
    • followup_id to cancel an automatic message in waiting_acceptance without altering its invitation.
  3. Report the cancellation result; do not assume a local request cancelled the remote action.

Trust returned state

Treat sent, queued, accepted, and cancelled states returned by SalesTouch as the source of truth. Do not infer execution from the original prompt.