User Guide
Step-by-step instructions to set up and run your LinkedIn campaigns.
Contents
- Quick Start – Your First Salesbot Campaign
- Initial Setup
- Blacklist
- Adding Contacts
- Full Text Search
- Launching and Configuring a Campaign
- Message Generation
- Inbox Section
- CRM – Pipeline, Notes & Tasks
- Posts
- Subscription
- MCP API for AI (Claude, GPT, Cursor)
- MCP approvals & safety (anti-block)
- Auto-replies
- Account security
- Emergency Stop
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.
- Connect your LinkedIn account in Settings → LinkedIn. A green ‘LinkedIn connected’ badge appears in the header.
- 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.
- Optionally add blocked domains/companies/emails in Blacklist – matching leads will be skipped automatically on import.
- Create a lead list: Contacts → New list (e.g. 'CMO Prague – Q1'). Lists separate target audiences between campaigns.
- 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.
- 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.
- 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.
- 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.
- In the campaign detail set the daily invitation and message limits, allowed hours, and optionally enable Auto-approval with GPT check (gpt-5-nano runs a second-pass quality review; on rejection Gemini rewrites the draft using the feedback).
- Add leads to the campaign: campaign detail → Add leads → pick contact list(s). Duplicate check, blacklist and manual exclusion are applied.
- Start the campaign with the Start button. Salesbot schedules actions with randomized time offsets (anti-detection), respects allowed hours and daily limits. 3rd-degree / out-of-network leads are re-checked after 7 days.
- Message approval: in Campaign → Messages you see all generated drafts with pending_approval status. You can bulk-approve, edit text, or reject with feedback (Gemini generates a new version based on your feedback).
- 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.
- 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.
- Track stats in the campaign dashboard: invitations sent, accepted connections, messages sent, replies, conversion rate. Adjust templates, delays or targeting based on results.
- 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.
- 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.
- Go to Settings and open the LinkedIn tab.
- Click Connect LinkedIn and finish the login in the new window.
- Once connected, the header shows a green ‘LinkedIn connected’ badge.
- In Settings, review daily limits, allowed sending hours and time zone.
- Invite teammates in the Users section and assign roles (admin/user).
Blacklist
Blacklist prevents outreach to specific domains, companies or people.
- Open Blacklist from the menu.
- Click Add and choose the entry type: domain, company or specific email.
- Use Import for bulk uploads (CSV, one entry per line).
- Blacklist is applied automatically when importing new leads – matches are skipped.
- 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.
- Go to Contacts and pick or create a contact list.
- Click Add contacts and choose a source: Google X-Ray, Sales Navigator URL, LinkedIn people search or CSV upload.
- For searches, fill in filters (title, location, company, industry) and run it.
- After scraping finishes, review the results – duplicates and blacklist are filtered automatically.
- Select leads to keep and add them to your list.
- 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.
- In Contacts, select a list and click Add contacts → Google X-Ray.
- Enter a search query (e.g. 'site:linkedin.com/in "Sales Manager" Prague').
- The system searches Google and extracts the LinkedIn profile URLs from the results.
- Alternatively, paste a LinkedIn Sales Navigator search URL and the system downloads the matching profiles automatically.
- For individual leads you can enter a direct LinkedIn URL – only the profile link is required, email and phone are optional.
- Search supports up to 15 pages of Google results (100 results per page) for bulk import.
- 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.
- In Campaigns click Create campaign and enter a name and description.
- Pick a template (e.g. Connect + 3 follow-ups) or define custom steps.
- For each step set the action type (visit, connect, message) and the delay in hours.
- In campaign settings set the daily invitation limit and allowed sending hours.
- Add contacts from your lists – duplicates and blacklist are checked automatically.
- Optionally enable auto-approval with GPT quality check.
- Click Start campaign – the system will generate messages and schedule actions with anti-detection in mind.
Message Generation
Messages are personalized with AI (Gemini) using data from the LinkedIn profile.
- For each ‘message’ step write a template with placeholders like {first_name} or {company}.
- AI fills in a personalized intro or full message based on the lead’s headline, role and company.
- Czech messages automatically use the 5th case (vocative) for names.
- Review and edit generated drafts in Campaigns → Messages before sending.
- If approval is off, messages are sent automatically at the scheduled time.
- Connection invitations are always sent without a note to avoid blocks.
Inbox Section
Inbox brings all your LinkedIn conversations into one place.
- Open Inbox from the main menu.
- The left panel lists conversations – unread ones are highlighted.
- Click a conversation to see the full message history.
- For quick replies use templates (Templates button above the reply box) or AI suggestion.
- You can tag a conversation with up to 2 tags for easier sorting.
- 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.
- 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.
- 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).
- Click a lead to open its detail drawer: editable contact details, the full scraped LinkedIn profile (View full profile), and three tabs – Notes, Tasks and Activity.
- 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.
- Tasks: add follow-ups with due dates and tick them off. The AI can create and complete tasks too.
- Activity: a timeline of LinkedIn interactions plus every pipeline stage change.
- Custom fields you have defined (e.g. Budget, Renewal date) appear in the drawer and are editable inline.
- 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.
- Download CRM Backup (CSV) exports your whole pipeline at any time.
- 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.
- Go to Posts and click New post.
- Write the post text, optionally attach an image or link.
- Pick the publish time – now or scheduled.
- After publishing the post appears in the list with status and reach stats.
- You can duplicate posts and reuse them as templates.
Subscription
Manage your plan, billing and credit usage.
- Open Settings → Subscription (billing now lives inside Settings).
- Pick a plan based on the number of contacts and campaigns you need.
- Payments go through Stripe – you can see billing history and upcoming charges.
- Track daily credit usage on the dashboard so you don’t exceed your plan.
- 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.
- 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.
- 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.
- 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.
- search_linkedin_people – searches people on LinkedIn by keywords / title / company / location. Saves results to contacts with dedup and blacklist filter and returns IDs.
- 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.
- 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.
- 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.
- list_contacts – lists your contacts with ID, name, company and status (invite_sent, connected, replied…). Filterable by lead list or campaign.
- list_campaigns – lists campaigns with ID, name, status (draft/running/paused) and lead counts. AI uses this for campaign_id in other tools.
- 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.
- send_linkedin_message – direct one-off message outside any campaign. Random 30–180 s delay before sending (anti-detection), counts against the daily message limit.
- send_connection_request – sends a connection invitation, always without text (anti-block policy) regardless of account type. Counts against the daily invitations limit.
- 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'.
- list_pending_approvals – lists all drafts pending approval (name, headline, company, generated text). Used as input for bulk review by an AI assistant.
- 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.
- 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.
- 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 MCP approval setting, applies a 30–180 s anti-detection delay). Image attachments must be added in the in-app post editor.
- 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.
- list_inbox_chats / get_chat_messages / reply_to_chat / mark_chat_read – read the LinkedIn inbox in real time and reply (max 2 AI replies per conversation; replies are injection-scanned).
- 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.
- scrape_website – fetch the readable text of a public web page as extra context for writing messages (max 250 pages/week).
- 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 before writing), update_contact (save email/phone/etc.), export_crm (CSV). A lead enters the CRM the moment any of these touch it.
- 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).
- 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.
- Tip: combine list_pending_approvals + approve_message to build bulk AI approval with your own quality rules.
MCP approvals & safety (anti-block)
Every send_message and send_connection_request initiated by an external AI is routed through a safety pipeline: a per-hour throttle (default 10 actions / 5 messages per account in the last 60 minutes) and an optional human approval queue. This keeps you safely under LinkedIn's recommended ceiling of 100 actions/day, 10 actions/hour and 30–50 direct messages/day per account.
- Open Settings → MCP → 'MCP safety (anti-block)'. Toggle 'Require human approval' on – every AI-initiated message or connect will then be queued for your review instead of sent directly.
- Set 'Max MCP actions per hour' (recommended 10) and 'Max MCP messages per hour' (recommended 5). The MCP server enforces these limits server-side – when reached, the AI tool returns a 'Hourly limit reached' response and stops.
- Open 'MCP Approvals' in the main menu. The number badge shows pending requests. Each card displays the action type (Message / Connect), the target LinkedIn ID and the timestamp.
- For messages you can edit the text directly in the textarea before approving – the AI's draft is a suggestion, the final wording is yours.
- Click 'Approve' to send (the action then counts against the daily limit and is logged), or 'Reject' to drop the request. Rejected requests are not retried.
- If you trust the AI for a particular workflow, turn 'Require human approval' off – the per-hour throttle still applies as a hard safety net, so even a buggy AI loop cannot blast through LinkedIn limits.
- Daily limits configured in Settings → Daily Limits apply on top of all of this – they are the ultimate ceiling and block the action regardless of approval status.
- Tip: keep approvals on while you're getting comfortable with the AI assistant, then loosen up. The hourly throttle gives you a safety floor either way.
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.
- Open the Auto-replies section in the main menu.
- Set the Match threshold (slider, default 75%) – how closely the incoming message must match the pattern to trigger. Higher = stricter, fewer false positives.
- 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.
- 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.
- If a pattern has the webhook enabled it is marked with a badge in the list – you instantly see which patterns call external systems.
- You can disable any pattern with the 'Active' switch – inactive patterns are skipped but kept saved.
- 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 is designed to protect both your LinkedIn account from being blocked and your data inside the app. Even when 20 messages arrive at once via MCP or bulk import, they are never sent in a burst – the system always mimics human behavior with randomized spacing, daily caps and a gradual ramp-up for new accounts.
- 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.
- 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.
- 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.
- 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 protects new accounts that LinkedIn monitors most strictly.
- Fatigue model – the system tracks account 'fatigue' (daily activity + streak). If you run several days in a row at maximum, it slows itself down.
- Cooldowns between action types – minimum delays sit between connect → message → next message so the sequence looks like real human activity.
- 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.
- 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.
- Emergency Stop – a button in the top bar instantly halts all scheduled actions across campaigns and auto-replies.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- When active, the button pulses red and shows the text 'STOP active'. Clicking it turns the stop off – no confirmation dialog needed.
- After disabling the emergency stop, you must manually restart campaigns and auto-replies. The system does not remember the previous state of individual campaigns.
- Tip: Use the emergency stop preventively during major setting changes or when you need to temporarily 'pause' your LinkedIn account.