User Guide

Step-by-step instructions to set up and run your LinkedIn campaigns.

For public-profile research, see our LinkedIn X-ray search guide with tested Google queries and the Salesbot verification workflow.

Quick Start – Your First Salesbot Campaign

End-to-end walkthrough: from connecting LinkedIn through lead search, campaign setup and message generation, to receiving replies and AI suggestions in the inbox. Follow these steps in order.

  1. Connect your LinkedIn account in Settings → LinkedIn. A green ‘LinkedIn connected’ badge appears in the header.
  2. In Settings configure daily limits (invitations, messages), allowed sending hours and time zone. For new LinkedIn accounts start small (10–30% of limits) and ramp up gradually.
  3. Optionally add blocked domains/companies/emails in Blacklist – matching leads will be skipped automatically on import.
  4. Create a lead list: Contacts → New list (e.g. 'CMO Prague – Q1'). Lists separate target audiences between campaigns.
  5. Find leads – inside the list click Add contacts and pick one of the methods: Google X-Ray (saves LinkedIn limits, up to 15 pages × 100 results), a LinkedIn Sales Navigator / search URL (walks a prepared filtered URL), LinkedIn people search, CSV upload (columns: name, linkedin_url, company, email), or a single LinkedIn URL manually.
  6. Once scraping finishes, review results – duplicates, blacklist and manually excluded contacts are filtered automatically. The system fills in headline, company, role and detects gender for proper vocative salutations.
  7. Create a campaign: Campaigns → Create campaign. Enter name, description and pick a template (5 presets: Connect only, Connect + 1 message, Connect + 3 follow-ups, Reactivation, Custom) or define your own steps.
  8. Configure campaign steps: action type (visit / connect / message) and delay in hours between steps. For message steps write a template with placeholders {first_name}, {company} – AI (Gemini) personalizes the intro based on the lead profile. Connection invitations are always sent without a note – this cannot be enabled.
  9. In the campaign detail set the daily invitation and message limits, allowed hours, and optionally enable the message quality check (AI checks every draft and shows a score and what is wrong; a failing draft is rewritten once from the finding; messages are never approved automatically).
  10. Add leads to the campaign: campaign detail → Add leads → pick contact list(s). Duplicate check, blacklist and manual exclusion are applied.
  11. After adding leads, Salesbot generates message drafts and opens them for approval. Review, edit or reject them with feedback; nothing is sent until the drafts are approved.
  12. After approval, click Start campaign. Salesbot schedules actions with randomized time offsets, respects allowed hours and daily limits. 3rd-degree / out-of-network leads are re-checked after 7 days.
  13. When a lead replies, the campaign stops for them immediately (webhook + safety net) – no further follow-ups will be sent. The status in the list updates to Replied.
  14. Messages section (Inbox): shows all LinkedIn conversations. Open a conversation → use the AI reply suggestion (context of the last 20 messages, Gemini), quick-reply templates, or type manually. Conversations can be tagged with up to 2 tags for easier sorting.
  15. Track stats in the campaign dashboard: invitations sent, accepted connections, messages sent, replies, conversion rate. Adjust templates, delays or targeting based on results.
  16. Track every campaigned lead in the CRM (left menu → CRM): leads added to a campaign appear there with their pipeline stage, notes, tasks and activity. Move them through stages, add notes/tasks, or let the AI do it via MCP.
  17. Tip: Advanced users can delegate the whole workflow (search, generation, approval, and CRM tracking) to an external AI (Claude/GPT/Cursor) via the MCP API section – see the CRM and MCP chapters of this guide.

Initial Setup

Before you start, connect your LinkedIn account and configure workspace basics.

  1. Go to Settings and open the LinkedIn tab.
  2. Click Connect LinkedIn and finish the login in the new window.
  3. Once connected, the header shows a green ‘LinkedIn connected’ badge.
  4. In Settings, review daily limits, allowed sending hours and time zone.
  5. Invite teammates in the Users section and assign roles (admin/user).

Blacklist

Blacklist prevents outreach to specific domains, companies or people.

  1. Open Blacklist from the menu.
  2. Click Add and choose the entry type: domain, company or specific email.
  3. Use Import for bulk uploads (CSV, one entry per line).
  4. Blacklist is applied automatically when importing new leads – matches are skipped.
  5. You can edit or delete entries anytime – changes apply on the next import.

Adding Contacts

Contacts can be added from multiple sources – LinkedIn search, CSV or manually.

  1. Go to Contacts and pick or create a contact list. For existing LinkedIn connections, use Sync connections first; synchronization runs in batches, so start another run only after the batch finishes or its cooldown expires.
  2. Click Add contacts and choose a source: Google X-Ray, Sales Navigator URL, LinkedIn people search or CSV upload.
  3. For searches, fill in filters (title, location, company, industry) and run it.
  4. After scraping finishes, review the results – duplicates and blacklist are filtered automatically.
  5. Select leads to keep and add them to your list.
  6. Before launching a campaign, verify data completeness (name, company, LinkedIn URL).

Full Text Search

Search for leads via Google X-Ray, LinkedIn Sales Navigator, or direct profile URLs without manual browsing.

  1. In Contacts, select a list and click Add contacts → Google X-Ray.
  2. Enter a search query (e.g. 'site:linkedin.com/in "Sales Manager" Prague').
  3. The system searches Google and extracts the LinkedIn profile URLs from the results.
  4. Alternatively, paste a LinkedIn Sales Navigator search URL and the system downloads the matching profiles automatically.
  5. For individual leads you can enter a direct LinkedIn URL – only the profile link is required, email and phone are optional.
  6. Search supports up to 15 pages of Google results (100 results per page) for bulk import.
  7. Found contacts are automatically enriched with LinkedIn data and their gender is detected for correct vocative salutations.

Launching and Configuring a Campaign

A campaign defines the sequence of steps (visit → connect → messages) and its parameters.

  1. In Campaigns click Create campaign and enter a name and description.
  2. Pick a template (e.g. Connect + 3 follow-ups) or define custom steps.
  3. For each step set the action type (visit, connect, message) and the delay in hours.
  4. In campaign settings set the daily invitation limit and allowed sending hours.
  5. Add contacts from your lists – duplicates and blacklist are checked automatically.
  6. Optionally enable the message quality check (score and warnings per draft; you still approve every message).
  7. Click Start campaign – the system will generate messages and schedule actions according to the configured cadence and limits.

Message Generation

Messages are personalized with AI (Gemini) using data from the LinkedIn profile.

  1. For each ‘message’ step write a template with placeholders like {first_name} or {company}.
  2. AI fills in a personalized intro or full message based on the lead’s headline, role and company.
  3. Czech messages automatically use the 5th case (vocative) for names.
  4. Review and edit generated drafts in Campaigns → Messages before sending.
  5. If approval is off, messages are sent automatically at the scheduled time.
  6. Connection invitations are always sent without a note to avoid blocks.

Inbox Section

Inbox brings all your LinkedIn conversations into one place.

  1. Open Inbox from the main menu.
  2. The left panel lists conversations – unread ones are highlighted.
  3. Click a conversation to see the full message history.
  4. For quick replies use templates (Templates button above the reply box) or AI suggestion.
  5. You can tag a conversation with up to 2 tags for easier sorting.
  6. When a lead replies, the campaign stops for them automatically – no more follow-ups.

CRM – Pipeline, Notes & Tasks

The CRM (left menu → CRM) is your sales pipeline. It is separate from Contacts: Contacts is your full raw lead list, while the CRM holds only the leads you are actively working. A lead enters the CRM automatically when you add it to a campaign (tagged with that campaign), or you can add any contact manually with 'Add to CRM', or let the AI add it via MCP. A CRM lead is permanent — deleting the contact or even the whole campaign does not remove it from the CRM.

  1. Open CRM from the left menu. The chips at the top are your pipeline stages with live lead counts – click one to filter. Search by name, company or role.
  2. Each row shows the lead's stage, the campaign it came from, and last activity. Change a stage with the inline dropdown (Prospect → Contacted → Demo → Won → Lost, or your own stages).
  3. Click a lead to open its detail drawer: editable contact details and five tabs – Notes, Tasks, Messages, Activity and Profile. View full profile also shows 360° history: campaigns and dates, sent LinkedIn messages and actions, and all notes.
  4. Notes: write a summary of a conversation with optional pain points and sentiment. Notes you add and notes the AI logs appear side by side.
  5. Tasks: add follow-ups with due dates and tick them off. The AI can create and complete tasks too.
  6. Activity: a timeline of LinkedIn interactions plus every pipeline stage change.
  7. Messages: a persistent store of generated outreach copy for the lead – emails, email follow-ups, LinkedIn messages and LinkedIn follow-ups. Your AI agent stores them via MCP (save_lead_message); you read and send them through the appropriate channel (for example send_email from your own mailbox) – the app does not send them itself.
  8. Profile: complete data retrieved from LinkedIn (headline, full work history, education and skills). If it is missing, use Enrich from LinkedIn through the connected LinkedIn account / Unipile.
  9. Custom fields you have defined (e.g. Budget, Renewal date) appear in the drawer and are editable inline.
  10. Add leads manually: in Contacts select rows → 'Add to CRM'. To remove leads, select them in the CRM and click Delete – this removes only the CRM record, not the underlying contact.
  11. Download CRM Backup (CSV) exports your whole pipeline at any time.
  12. Reconfigure the CRM via your AI assistant (MCP): rename or add pipeline stages, set their colors, and add custom fields – see the MCP chapter.

Posts

Plan and publish LinkedIn posts directly from the app.

  1. Go to Posts and click New post.
  2. Write the post text, optionally attach an image or link.
  3. Pick the publish time – now or scheduled.
  4. After publishing the post appears in the list with status and reach stats.
  5. You can duplicate posts and reuse them as templates.

Subscription

Manage your plan, billing and credit usage.

  1. Open Settings → Subscription (billing now lives inside Settings).
  2. Pick a plan based on the number of contacts and campaigns you need. Monthly billing is 590 CZK / €29; yearly billing is 6,000 CZK / €264 (equivalent to 500 CZK / €22 per month). All prices exclude VAT.
  3. Payments go through Stripe – you can see billing history and upcoming charges.
  4. Track daily credit usage on the dashboard so you don’t exceed your plan.
  5. Use Manage subscription to update payment method or cancel via the Stripe customer portal.

MCP API for AI (Claude, GPT, Cursor)

The MCP server lets an external AI assistant connect to your account and delegate message generation, approval and sending. All actions respect daily limits, allowed hours, blacklist and stop-on-reply.

  1. Open the MCP API section in the main menu – you’ll find the endpoint (https://app.salesbot.cz/api/mcp), your long-lived API key, and the ready-made config for Claude Desktop / Cursor.
  2. Copy the config JSON into your MCP client. Authenticate with your key in the x-mcp-api-key header (NOT Authorization: Bearer). The key is long-lived – regenerate it in Settings → MCP if needed.
  3. Authenticate LinkedIn first. In the app: Settings → LinkedIn → Connect (opens the secure auth.salesbot.cz flow). Via MCP: the AI can call get_linkedin_status to check, and connect_linkedin to get a connect link for you to open – no other step needed.
  4. search_linkedin_people – for prospecting, prefer decisionMakers:true + company + departments (for example finance, operations, facility) + limit 20–30. Salesbot makes one company-scoped search for senior current employees and ranks them locally by department; do not also send title/titles. Use exact title/titles only for one specific role. If count:0, inspect company_filter and company_candidates. Save contacts only through upsert_linkedin_contact.
  5. search_google_xray – Google X-Ray search for public LinkedIn profiles (site:linkedin.com/in). Saves LinkedIn limits, paginates up to 15× of 100 results, auto-filters duplicates and blacklist.
  6. search_linkedin_navigator – scrapes a Sales Navigator / LinkedIn search URL. You pass a ready URL with filters and Salesbot walks the leads and saves them to contacts.
  7. get_contact_profile – full contact profile (name with vocative, headline, company, role, location, language, campaign status, interaction history) as context for AI when writing messages.
  8. list_contacts – lists your contacts with ID, name, company and status (invite_sent, connected, replied…). Filterable by lead list or campaign.
  9. list_campaigns – lists campaigns with ID, name, status (draft/running/paused) and lead counts. AI uses this for campaign_id in other tools.
  10. add_contacts_to_campaign – adds contacts (by ID) to an existing campaign. Blacklist, duplicate check and manual exclusion are applied. Salesbot then schedules campaign steps per template and daily limits.
  11. send_linkedin_message – direct one-off message outside any campaign. A random 30–180 second delay is applied before sending and the action counts against the daily message limit.
  12. send_connection_request – sends a connection invitation, always without text (anti-block policy) regardless of account type. Counts against the daily invitations limit.
  13. Checking accepted invitations – for campaigns use list_campaign_queue (invitation status per contact: not sent / pending / accepted, plus counts); Salesbot checks acceptance itself once a day and then runs the next step. For a one-off invitation outside a campaign: sync_linkedin_connections loads the current connections (no search quota; 15–20 min between pages, at most 4 pages an hour), then search_linkedin_people with connectionsOnly: true finds the person among them. To track acceptance, prefer sending invitations through a campaign (e.g. the Connection only type).
  14. generate_campaign_message – AI (Gemini) generates a personalized draft for a specific contact and campaign step from the template and lead profile. The message is NOT sent – stored as 'pending_approval'.
  15. list_pending_approvals – lists all drafts pending approval (name, headline, company, generated text). Used as input for bulk review by an AI assistant.
  16. approve_message – approves a draft and hands it to the executor for sending (respecting daily limits and allowed hours). Optional text edit. skip_gpt_check=false runs a second-pass review via gpt-5-nano – if GPT rejects, the draft is automatically sent back to Gemini for a rewrite based on GPT's feedback.
  17. reject_message – rejects a draft with textual feedback (e.g. 'too formal, shorten to 2 sentences'). Gemini generates a new version per the feedback, which again awaits approval.
  18. publish_linkedin_post – creates a LinkedIn post from a connected profile. Default = save as draft for in-app review; auto_publish=true publishes immediately (respects the MCP approval setting and applies a 30–180 second anti-detection delay). Image attachments must be added in the in-app post editor.
  19. get_daily_limits – returns current daily quota usage for a profile: used vs. allowed counts for invitations, messages and profile visits; ramp-up status for new accounts; allowed hours; and whether actions are currently permitted. Call before bulk runs or to debug why the executor is skipping actions.
  20. Provider safety – the MCP gateway allows at most 20 tool calls per minute per workspace; job details and web search are capped at 4/minute, and direct post publishing at 2/hour. A rate-counter failure is a stop signal; never retry rapidly.
  21. Keep and reuse the exact UUIDs returned by Salesbot: profile_id, list_id, campaign_id, contact_id, campaign_contact_id and step_id. Never guess IDs; when state is unclear, inspect it with a read-only call first.
  22. get_linkedin_status / connect_linkedin – check whether LinkedIn is connected/active; if not, generate a white-labeled connect link (auth.salesbot.cz) for the user to finish login. Call these when a tool returns ACCOUNT_NOT_CONNECTED or ACCOUNT_BLOCKED.
  23. Inbox workflow: list_inbox_chats → get_chat_messages → reply_to_chat → mark_chat_read. Via MCP you can read your LinkedIn conversations and reply to them. With human-in-the-loop enabled (default), a reply is queued in MCP Approvals first; with approval disabled, it sends only during allowed hours after a random 6–14 second delay. The 2 AI replies per thread cap, daily/hourly limits and prompt-injection scan still apply.
  24. create_campaign / update_campaign_settings / start_campaign / stop_campaign – create a campaign with steps (saved as draft), change limits/hours/auto-approve, and start or stop it.
  25. CRM tools – the AI manages your pipeline: set_deal_stage (move a lead through stages), log_crm_note (save a conversation summary with pain points and sentiment), create_task / list_tasks / complete_task (follow-ups), get_lead_context (full lead context including custom fields and saved messages), save_lead_message / list_lead_messages (store and read generated outreach copy on a lead – emails, follow-ups and LinkedIn messages – so the AI can later send them through the right channel; the app never sends them itself), update_contact (save email/phone/etc.), export_crm (CSV). A lead enters the CRM the moment any of these touch it.
  26. CRM structure tools – reconfigure the CRM itself: list_crm_stages / add_crm_stage / rename_crm_stage / delete_crm_stage (rename or add pipeline stages and set their colors), and list_crm_fields / add_crm_field / delete_crm_field / set_lead_fields (define custom fields like Budget and set their values per lead).
  27. Errors are structured: every error returns a stable code (e.g. ACCOUNT_NOT_CONNECTED, DAILY_LIMIT_REACHED, RATE_LIMITED, APPROVAL_REQUIRED, SAFETY_BLOCKED) so the AI can react automatically.
  28. Tip: combine list_pending_approvals + approve_message to build bulk AI approval with your own quality rules.

Approvals – messages, e-mails and AI actions

Everything waiting for your decision is on one page, Approvals (in the menu). It has three tabs: Campaigns, E-mails and LinkedIn from AI. Three switches decide what lands there – each applies to something different. All three are together at the bottom of the Approvals page (Approval settings).

  1. Campaigns: message drafts from campaigns. The “Message quality check” switch is in each campaign's settings. When on, every draft goes through the AI check (name, company, signature, grammar, leftover template text) and shows a score and what is wrong. Nothing is approved automatically: all messages wait in the Campaigns tab for your approval. Applies to campaigns created in the app and by AI.
  2. E-mails: e-mails from your mailbox sent by an AI agent, by campaigns and by bulk sends. The “Manual approval before sending” switch is in Settings → E-mail for each mailbox. An e-mail you write to one person yourself goes out immediately.
  3. LinkedIn from AI: one-off AI agent actions outside campaigns – LinkedIn messages and invitations, inbox replies and directly published posts. The “Require approval (human-in-the-loop)” switch is in Settings → MCP. It has no effect on campaign messages.
  4. An e-mail from AI must pass both switches – MCP and mailbox. It goes out without approval only when both are off.
  5. You can edit AI messages before approving – the draft is only a suggestion. Approve runs the action, Reject discards it and it is not retried.
  6. Also set 'Max MCP actions per hour' and 'Max MCP messages per hour' in Settings → MCP conservatively. The server enforces them even with approval off; when they are reached, do not retry quickly.
  7. The account's daily limits in Settings always apply on top. No approval overrides them, and no Salesbot setting guarantees LinkedIn or the provider will not restrict the account.
  8. Tip: while you get used to the AI assistant, keep approval on and relax it gradually – starting with campaigns that have a proven template.

Auto-replies

Auto-replies can automatically respond to incoming Inbox messages based on patterns you define (e.g. 'interested', 'send more info', 'unsubscribe'). The system matches incoming messages against patterns with AI and, on a strong enough match, either sends a prepared reply or calls a webhook to an external tool. To stay human, replies are only sent during your allowed sending hours and never within 90 seconds of the incoming message (the scanner runs every ~30 min) – never an instant bot reply – and are capped at 2 AI replies per thread. It only replies to messages that arrive after you switch auto-replies on and only in conversations you initiated.

  1. Open the Auto-replies section in the main menu.
  2. Set the Match threshold (slider, default 75%) – how closely the incoming message must match the pattern to trigger. Higher = stricter, fewer false positives.
  3. Click 'Add pattern' and fill in: name, sample lead message (e.g. 'Yes, I'm interested, send info'), reply text (can be empty if you only want the webhook) and optionally a Webhook URL.
  4. Webhook URL is universal – it works with Make, Zapier, n8n, Smartlead or any custom endpoint. On a match a POST is sent with the lead data, incoming message and reply text – your external scenario can then send an email, create a CRM task, ping Slack, etc.
  5. If a pattern has the webhook enabled it is marked with a badge in the list – you instantly see which patterns call external systems.
  6. You can disable any pattern with the 'Active' switch – inactive patterns are skipped but kept saved.
  7. Recommendation: start with a higher threshold (80–90%), watch the Inbox to see how often it fires, and tune from there. Test new patterns on a few real conversations before relying on them.

Account security

Salesbot helps manage LinkedIn automation risk and protect data inside the app. Even when multiple messages arrive at once via MCP or bulk import, they are not sent in a burst – the system uses conservative spacing, daily caps and a gradual ramp-up for new accounts. No tool can guarantee an outcome with LinkedIn.

  1. Human-like spacing between actions – every message, connection request and profile visit is scheduled with a random offset (jitter). No two actions fire in the same second or on a fixed interval, so the behavior looks natural.
  2. Allowed working hours – actions only run inside the hours you configure (typically 9 AM–5 PM in your timezone). Anything outside the window is rolled over to the next working day.
  3. Hard daily limits per user – defaults: 80 connection requests, 40 messages and 100 profile visits per day. Once exceeded, the rest is automatically pushed to the next day. You can lower these in Settings, but raising them above defaults is not recommended.
  4. Gradual ramp-up for new accounts – a freshly connected LinkedIn account starts at 10% of the limit and scales over time: Day 1–3: 10%, Day 4–7: 30%, Day 8–14: 60%, Day 15+: 100%. This helps avoid sudden activity on new accounts.
  5. Fatigue model – the system tracks account 'fatigue' (daily activity + streak). If you run several days in a row at maximum, it slows itself down.
  6. Cooldowns between action types – minimum delays sit between connect → message → next message to keep the action sequence controlled and conservative.
  7. Separate account-type limits – Standard LinkedIn and Sales Navigator use different limits for search, profile views and sending. Selecting Sales Navigator does not raise Standard-account limits; each mode has its own provider protection.
  8. Search protection – one people-search request accepts at most 3 job titles. When the provider returns a protection response or retry_after, do not retry immediately; wait and use Google X-Ray if appropriate.
  9. Safe connection sync – existing LinkedIn connections are fetched in batches with a continuation cursor and cooldown. Do not start another manual sync while a batch is running; the app rejects runs that are too early.
  10. Bot-to-bot kill-switch in auto-replies – maximum 2 AI replies per thread. After that the thread is locked, tagged 'Requires human' and you get an email. This prevents infinite loops that LinkedIn flags as spam.
  11. Unreachable lead detection – 3rd-degree / out-of-network leads are not retried forever. After a failure they pause for 7 days before being re-checked.
  12. Emergency Stop – a button in the top bar instantly halts all scheduled actions across campaigns and auto-replies.
  13. Login protection – the LinkedIn session (li_at cookie) is stored securely in the database, accessible only to server-side functions. If the session is invalidated, campaigns pause automatically and you are prompted to re-login.
  14. Authorization protection – the connection callback is idempotent: duplicate callbacks are ignored and the same LinkedIn account cannot be connected to another Salesbot user at the same time.
  15. Data protection inside the app – Row-Level Security on every table (you only see your own data), roles stored in a separate table (protection against privilege escalation), HTTPS everywhere, no sensitive keys exposed in the browser.
  16. AI layer protection – incoming lead messages are sanitized and wrapped in security blocks so the AI cannot execute instructions hidden in a message (prompt injection). AI outputs are checked by a safety filter – suspicious drafts (added URLs, language switches) are rejected.
  17. Denial-of-wallet protection – an incoming message above a certain length is never sent to the AI. This prevents intentional 'draining' of the AI wallet with long spam messages.
  18. Human-in-the-loop – AI never sends anything 'on its own' without a review option. Campaigns include an approval step, optionally with a second AI verification. Every action is logged in the DB with who triggered it (user × MCP × cron).

Emergency Stop

The Emergency Stop (kill switch) is a safety feature that instantly pauses all automated activity in Salesbot. Use it when you need to quickly halt campaigns, auto-replies or scheduled actions – for example if you suspect a LinkedIn account block, a strategy change or maintenance.

  1. The Emergency STOP button is located in the top bar next to the LinkedIn connection status. When inactive, it appears as an outline button with a green icon.
  2. Clicking the button opens a confirmation dialog. Once confirmed, the system will immediately: pause all running campaigns, disable all active auto-reply patterns and cancel scheduled actions.
  3. While the emergency stop is active, no new campaign can be started. The system shows a toast notification and displays a warning in the campaign detail.
  4. When active, the button pulses red and shows the text 'STOP active'. Clicking it turns the stop off – no confirmation dialog needed.
  5. After disabling the emergency stop, you must manually restart campaigns and auto-replies. The system does not remember the previous state of individual campaigns.
  6. Tip: Use the emergency stop preventively during major setting changes or when you need to temporarily 'pause' your LinkedIn account.