Starter
$41/mo
billed monthly
$34/mo
billed annually
1 user, 2,000 active prospects, 6,000 emails/mo, 1,500 Lead Finder credits/mo
Plan details
Lead Finder top-ups from $13/500 credits
Cold-email sequencer bundled with the Lead Finder B2B database (852M+ contacts, 9-provider waterfall), with unlimited mailboxes, a REST API on every plan, an official MCP server and a CLI. Best for budget all-in-one: sending + verified contact data on one plan.
The actions you pay for, as Saleshandy prices them.
| Action | Cost | Per |
|---|---|---|
| Reveal verified work email | 1 | Lead Finder credit |
| Reveal verified mobile phone | 6 | Lead Finder credits (7 with email) |
| Enrich one company (POST /v1/enrich/company) | 0.1 | Lead Finder credit per company (measured: creditsCharged 0.1, balance 50 → 49.9) |
| Lead Finder credit top-up | $13 / $25 / $50 / $100 / $180 / $320 / $800 / $1,600 | 500 / 1k / 2.5k / 5k / 10k / 20k / 50k / 100k credits |
US dollars, as Saleshandy's pricing page shows them on 25 Oct 2026. Monthly and annual billing are shown apart.
Free tier 7-day free trial, no credit card, trial sending capped at 100 emails; the trial account shows 50 Lead Finder credits and 2,000 active prospects (in-app Billing, our trial 2026-10-25)
$41/mo
billed monthly
$34/mo
billed annually
1 user, 2,000 active prospects, 6,000 emails/mo, 1,500 Lead Finder credits/mo
Lead Finder top-ups from $13/500 credits
$99/mo
billed monthly
$76/mo
billed annually
10 users, 30,000 active prospects, 100,000 emails/mo, 4,000 Lead Finder credits/mo; adds webhooks, CRM and no-code integrations
top-up packs
$189/mo
billed monthly
$149/mo
billed annually
unlimited users and active prospects, 200,000 emails/mo, 8,000 Lead Finder credits/mo, white-label
300K emails $299/$239; 600K $599/$479; custom = sales
Docs publish no numeric REST limit ('fair usage limits').
Live REST responses on our trial carried x-ratelimit-limit: 20 with x-ratelimit-reset on the next minute boundary, plus x-ratelimit-global-limit: 300 (window not stated). Enrichment has separate per-account per-minute/hour/day limits readable via GET /v1/enrich/rate-limits: our trial returned 60/min, 3,000/hour, 50,000/day (the spec example shows 30 / 1,000 / 10,000). Sending limits are per mailbox (daily sending limit settings).
Saleshandy uses API key. The steps below follow Saleshandy's own docs.
curl -X POST "https://open-api.saleshandy.com/v1/prospects/import" \
-H "x-api-key: $SALESHANDY_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'| What | Where |
|---|---|
| Documentation | developer.saleshandy.com/api-reference/introduction |
| API reference | developer.saleshandy.com/api-reference/introduction |
| OpenAPI spec | developer.saleshandy.com/openapi.json |
| llms.txt | saleshandy.com/llms.txt |
| Base URL | https://open-api.saleshandy.com |
| MCP server | https://mcp.saleshandy.com/mcp |
| SDKs | @saleshandy/saleshandy-cli (npm, official, Node 18+, multi-profile) |
Other Email sending tools in this directory, each with its own review.
Best for multi-account LinkedIn outreach where you want to rent extra sender profiles natively.
Aimfox API reviewBest for solo sellers or small teams running LinkedIn + email sequences from their own accounts.
Dripify API reviewBest for agencies and teams sending hundreds of thousands of emails a month that want dedicated IPs and no per-seat or per-lead….
EmailBison API reviewFour things to settle first, each read off Saleshandy's own pages.
Tell us what you want Saleshandy to do in your stack. We will show you how we would wire it into your data, outbound or CRM, and what we would check first.
Read from saleshandy.com/pricing.md and developer.saleshandy.com/api-reference/introduction. Verified 25 Oct 2026.
| Method | Path | What it does | Cost |
|---|---|---|---|
| POSTasync | /v1/prospects/import | To import new prospects | Not stated |
| POST | /v1/prospects/verification-status | To find the verification status of given emails | Not stated |
| POSTasync | /v1/prospects/import-with-field-name | Import prospect with field name., Ensure that the field names exist in the system. You can import up to 100,000 prospects at a time, with a maximum content size of 90 MB. This can b | Not stated |
| GET | /v1/prospects/import-status/{requestId} | While importing prospect you will receive the requestId. Using that requestId you can check the status of the import process. | Not stated |
| GET | /v1/prospects/attribute | Get Prospect Long text attribute value by id | Not stated |
| POST | /v1/prospects/{prospectId}/attribute | Update prospect field values, Sets or updates the value of one or more fields on a prospect profile. To update a single field, provide fieldId and attributeValue. To update multiple fields in one request | Not stated |
| GET | /v1/prospects/{prospectId}/notes | List notes for a prospect, Returns a paginated list of notes attached to the specified prospect, along with any draft note and pagination metadata. Use the skip and take query parameters to page throug | Not stated |
| GET | /v1/sequences | To get the sequences and steps of a user | free (measured on our trial) |
| POST | /v1/sequences | Create a new sequence, Create a new sequence with a title. Optionally attach one or more sending email accounts via emailAccountIds and/or assign a schedule in the same call. Upfront valid | Not stated |
| PATCH | /v1/sequences/update-prospect-outcome | To update the prospect outcome | Not stated |
| GET | /v1/sequences/{sequenceId}/email-accounts | List of sending email account of sequence | Not stated |
| POST | /v1/sequences/{sequenceId}/email-accounts/add | Add sending email account to sequence | Not stated |
| POST | /v1/sequences/{sequenceId}/email-accounts/remove | Remove sending email account from sequence | Not stated |
| POST | /v1/sequences/prospects/import-with-field-name | Import prospect with field name in to sequence, Ensure that the field names exist in the system. You can import up to 100,000 prospects at a time, with a maximum content size of 90 MB. This can be a large | Not stated |
| POST | /v1/sequences/status | Activate or Pause sequence for selected sequences | Not stated |
| POST | /v1/sequences/{sequenceId}/steps | Create a new step for a sequence, Add a step to the sequence. A step belongs to a channel (Email, LinkedIn, Task, Call, Whatsapp) and has at least one variant (up to 26 for A/B testing on Email). Required</strong | Not stated |
| GET | /v1/sequences/{sequenceId}/steps | List all steps and variants for a sequence, Return every step in the sequence, in execution order, each with its variants and their payloads. Useful for exporting a sequence or for inspecting what will be sent. | Not stated |
| PATCH | /v1/sequences/{sequenceId}/steps/{stepId}/variants/{variantId} | Update a step variant for a sequence, Update the payload, status, taskNote, priority, assigneeId, or attachmentIds of an existing variant. The payload</co | Not stated |
| GET | /v1/sequences/{sequenceId}/settings | Get sequence settings (optionally filter by code), Return all 13 public settings for the sequence along with the full assigned schedule ( id, name, timezone, isDefault ), all four <cod | Not stated |
| PATCH | /v1/sequences/{sequenceId}/settings | Update sequence settings and/or schedule, Send a partial update, only the codes in settings[] are changed, the rest are preserved. Unsubscribe link (code 1) The value must contain the {{link}} | Not stated |
| PATCH | /v1/sequences/{sequenceId}/priority-distribution | Update priority distribution for a sequence, Sets how outreach emails are prioritised across the sequence steps. Pass the preset id in the request body as priorityDistributionId. Preset reference: 1</ | Not stated |
| PATCH | /v1/sequences/{sequenceId}/schedule | Update the schedule assigned to a sequence, Assign a different schedule to the sequence. The schedule controls which days and time windows emails in this sequence are sent. Pass scheduleId (hashed) in the body. The response return | Not stated |
| POST | /v1/sequences/{sequenceId}/steps/{stepId}/variants | Add a new variant to an existing step, Append a variant to an existing step. Email steps support up to 26 variants (A/B…Z); other channels support a single active variant at a time. The payload shape must match the step's cha | Not stated |
| GET | /v1/sequences/{sequenceId}/steps/{stepId} | Get sequence step variants | Not stated |
| POST | /v1/sequences/{sequenceId}/contacts | Attach contacts to a sequence step | Not stated |
| POST | /v1/sequences/{sequenceId}/test-email | Send a test email for a sequence step | Not stated |
| POST | /v1/sequences/{sequenceId}/verify-prospects | Start prospect email verification for a sequence | Not stated |
| GET | /v1/fields | List all fields, Returns a list of fields defined in your account. Pass systemFields=true to include built-in system fields (such as First Name, Last Name, Email) along with your custom fields. Pass <code | Not stated |
| POST | /v1/fields | Create a custom field, Creates a new custom field that can be used to store additional information on prospect profiles. Supported field types are Text, Number, Long Text, Currency, Date, and Dropdown. | Not stated |
| PATCH | /v1/fields/{fieldId} | Update a custom field, Updates the label, fallback text, and/or tags of an existing custom field. Only custom (non-system) fields can be updated. Use the field ID returned by the GET /fields endpoint. | Not stated |
| GET | /v1/prospects/tags | to find all tags | Not stated |
| GET | /v1/prospects | Fetch all user prospects with pagination | Not stated |
| GET | /v1/prospects/{contactId}/minimal/sequences | Get minimal sequence histories for a contact | Not stated |
| PATCH | /v1/prospects/status | Change status of prospects (Mark prospect as replied, finished, paused, unsubscribed and active) | Not stated |
| POST | /v1/prospects/unsubscribe | to unsubscribe prospects | Not stated |
| POST | /v1/contacts/unsubscribe | to unsubscribe prospects | Not stated |
| POST | /v1/prospects/tags/assign | to assign tags to prospects | Not stated |
| POST | /v1/prospects/tags/un-assign | to unassign tags to prospects | Not stated |
| POST | /v1/blacklist-domains | Add a domain to the blacklist. | Not stated |
| POST | /v1/dnc | Add a domain/email(s) to the dnc list. | Not stated |
| GET | /v1/dnc | Get Dnc Lists | Not stated |
| GET | /v1/dnc/item/search | Search DNC item across all lists | Not stated |
| GET | /v1/dnc/{dncListId} | Get Dnc items by id | Not stated |
| GET | /v1/clients | Fetch all clients | Not stated |
| POST | /v1/clients | Create a new client | Not stated |
| POST | /v1/clients/assign/{resourceType} | Assign resource (sequence or email account) to a client | Not stated |
| POST | /v1/email-accounts/connect | Connect new sending email accounts with SMTP and IMAP settings | Not stated |
| POST | /v1/email-accounts/reconnect | Reconnect existing email accounts., This can be a large request and may take some time to complete. But you will get response immediately after the request is submitted. On request of this API, you will receive a r | Not stated |
| GET | /v1/email-accounts/connect/status/{requestId} | While connecting email accounts you will receive the requestId. Using that requestId you can check the status of the email account connection process. | Not stated |
| POST | /v1/email-accounts/bulk-update | Bulk Updates Email accounts | Not stated |
| POST | /v1/email-accounts | Fetch all Email accounts | Not stated |
| POST | /v1/email-accounts/smtp-imap/connect | Connect an SMTP/IMAP email account, Connects a new SMTP/IMAP email account for use as a sending mailbox in sequences. The account is always saved to the database, even if the connection test fails, inspect the | Not stated |
| POST | /v1/analytics/consolidated-stats | Get a comprehensive report of engagement statistics across all selected sequences for a specified time period. | Not stated |
| POST | /v1/analytics/stats | Access high-level statistics, including detailed insights into prospects and emails, for a specific sequence. | Not stated |
| POST | /v1/analytics/emailaccount/stats | Get comprehensive analytics and statistics for a specific email account including engagement metrics, sentiment analysis, and performance data. | Not stated |
| POST | /v1/analytics/email-sent-details | Export email sent details as a CSV report delivered to your login email address. | Not stated |
| POST | /v1/analytics/team/stats | Get Stats team(s) report | Not stated |
| GET | /v1/tasks | To get the tasks of a user | Not stated |
| POST | /v1/tasks/create | Create a task, Creates a task and assigns it to one or more prospects. Supported task types are Email (1), LinkedIn (2), and General (13). To create a task for a single prospect, provide prospectId. To | Not stated |
| POST | /v1/tasks/{taskId}/snooze | Snooze a single task until a specified time | Not stated |
| POST | /v1/tasks/{taskId}/skip | Skip a single task | Not stated |
| POST | /v1/tasks/{taskId}/complete | Complete a single task | Not stated |
| PATCH | /v1/tasks/{taskId}/note | Update task note | Not stated |
| GET | /v1/tasks/counts | Get task counts grouped by status | Not stated |
| GET | /v1/tasks/{taskId} | Get task details by ID | Not stated |
| GET | /v1/tasks/assignee/list | Get assignee list | Not stated |
| POST | /v1/tasks/bulk-snooze | Snooze multiple tasks with snooze duration or until a specific time | Not stated |
| POST | /v1/tasks/bulk-skip | Skip multiple tasks at the same time, You can skip up to 100 tasks at a time. This can be a large request and may take some time to complete. But you will get response immediately after the request is s | Not stated |
| GET | /v1/tasks/bulk-status/{bulkActionId} | Retrieve the status of all tasks affected by a bulk action and download a CSV | Not stated |
| GET | /v1/user/team-member-list | Get Team and Member List | free (measured on our trial) |
| GET | /v1/unified-inbox/outcome | To get the outcomes of a user | Not stated |
| GET | /v1/unified-inbox/unread-email-threads-count | Get all unread count | Not stated |
| POST | /v1/unified-inbox/emails | Get all emails based on filters | Not stated |
| GET | /v1/unified-inbox/emails/{emailThreadId} | Get whole thread by thread ID | Not stated |
| GET | /v1/unified-inbox/emails/{emailThreadId}/{emailId} | Get specific email content by thread ID and email ID | Not stated |
| POST | /v1/unified-inbox/emails/reply | Reply to an email thread | Not stated |
| POSTasync | /v1/enrich/contact | Enrich people by LinkedIn URL or full name + company or Lead Ids. Maximum 100 allowed | 1 Lead Finder credit per verified email; 6 per verified phone; 7 for email+phone (only verified results billed); max 100 per call |
| POST | /v1/enrich/contact/saved | List contacts already enriched or revealed in your account (Saved tab), with filters | free (spec: 'This endpoint does not consume credits') |
| POSTasync | /v1/enrich/company | Enrich companies by domain, website URL, company ID, or LinkedIn URL Maximum 100 allowed | 0.1 Lead Finder credit per company (measured on our trial: creditsCharged 0.1); max 100 per call |
| POST | /v1/enrich/company/saved | List companies already saved or enriched in your account (Saved tab), with filters | free (spec: 'This endpoint does not consume credits') |
| GETasync | /v1/enrich/status/{requestId} | Poll the status of an enrichment job (people or companies) | free (measured on our trial) |
| GETasync | /v1/enrich/status/result/{requestId} | Fetch full enrichment results once a job is completed | free (measured on our trial) |
| GET | /v1/credits | Get the account's credit balance and usage summary | free (measured on our trial) |
| GET | /v1/enrich/rate-limits | Get the current API rate limit status for the authenticated account | free (measured) |
| POST | /v1/search/people | Search leads by filters | Not stated |
| GET | /v1/search/filters | Get lead finder filters for current plan | free (measured on our trial) |
| POST | /v1/search/companies | Search companies by filters | Not stated |
| POST | /v1/leads/bulk-actions/add-to-sequence | Add lead-finder leads to a sequence step (creates prospects for new leads, optionally tags them) | Not stated |
| POST | /v1/leads/ai-chat | Run a natural-language AI search. Returns the assistant reply plus the first 25 matching leads or companies when a search was produced. | Not stated |
| POST | /v1/attachments | Upload an attachment, Upload a file (PDF, DOCX, image, etc.) and receive a hashed attachmentId. Pass that attachmentId in the attachmentIds[] of an Email-step variant when creating or | Not stated |
| POST | /v1/schedules | Create a schedule, Create a sending schedule that can be assigned to one or more sequences. Required fields: name, timezone (IANA Time Zone Database identifier, e.g. Asi | Not stated |
| GET | /v1/schedules | List all schedules, Return every schedule the caller can assign to a sequence, including full timeSlots detail. Use the id from any schedule as scheduleId in Create Sequence or Upda | Not stated |
| GET | /v1/sequences/{sequenceId}/subsequences | List all subsequences under a parent sequence, List every subsequence attached to a parent sequence, including progress ( 1 =Active, 2 =Paused, 3 =Finished), total steps, and engagement metrics. Filters< | Not stated |
| POST | /v1/sequences/{sequenceId}/subsequence | Create a new subsequence under a parent sequence, Create a new subsequence under the specified parent sequence with trigger conditions, optional schedule, and optional entry delay in a single call. Required, title (1–2 | Not stated |
| GET | /v1/sequences/subsequence/{subsequenceId}/settings | Get the schedule, entry delay, and trigger conditions of a subsequence | Not stated |
| PATCH | /v1/sequences/{sequenceId}/subsequence/{subsequenceId} | Update the schedule, entry delay, or conditions of a subsequence | Not stated |
| GET | /v1/domain/search | Search available domain names, Search for available domain names to purchase for cold email sending infrastructure. Required: domain (3–254 chars, keyword only, no TLD) and emailServiceProvider | Not stated |
| GET | /v1/domain/plans | Get domain pricing plans, Retrieve per-ESP, per-TLD, per-planType pricing before placing a domain purchase order. Returns plans for the purchasable ESPs ( Google, Microsoft, Azure ). <code | Not stated |
| GET | /v1/domain/orders/{orderId} | Get order status and provisioning state for all domains in an order | Not stated |
| GET | /v1/domain/orders | List all domain purchase orders with billing details, List all domain purchase orders on the account with billing and plan details. Returns billing plan data only, no domain names, mailbox emails, or provisioning status. For those, use GET /v1/do | Not stated |
| POST | /v1/domain/generate-mailbox-names | Generate mailbox name suggestions for a sender, Generate email address suggestions for a given sender name + domain. Not required for purchase but used in the domain setup flow before POST /v1/domain. Suggested addresses follow patter | Not stated |
| POST | /v1/domain/profile-picture/upload | Upload a profile picture for a sending domain mailbox, Upload a profile picture (company logo or sender avatar) for a sending domain, used in email warmup and inbox display. Content-Type: multipart/form-data. Supported forma | Not stated |
| GET | /v1/domain | List all purchased domains and mailboxes with provisioning status | Not stated |
| POST | /v1/domain | Purchase domains and mailboxes as managed email-sending infrastructure | Not stated |
| POST | /v1/domain/{id}/revoke | Restore a previously deleted domain (undo delete), Undo a prior DELETE /v1/domain/{id} call. Restores a domain whose status is "deleted" back to "active" and releases the reserved AnnualFlexi slot (i | Not stated |
| DELETE | /v1/domain/{id} | Delete an active domain (soft-delete, reversible via revoke) | Not stated |
| POST | /v1/notes | Create a note, Creates a note and attaches it to one or more prospects. To create a note for a single prospect, provide prospectId. To create the same note for multiple prospects in one request, provide | Not stated |
| PATCH | /v1/notes/{noteId} | Update a note, Updates the content or visibility of an existing note. Only the fields you provide will be changed, any field you omit will remain unchanged. Use the note ID returned when the note was created. | Not stated |
| POST | /v1/notes/attachments | Upload an attachment for a note, Upload a file (PDF, DOCX, image, etc.) to be referenced from a note. Returns a hashed attachmentId, pass it in attachmentIds[] on POST /v1/notes. Maximum file size is 20 MB. | Not stated |
| GET | /v1/unibox/categories | List email reply categories, Returns the list of reply categories used to classify inbound emails in the unified inbox (Unibox). Each category has a unique key, a display name, a sentiment (Positive, Negative, or Neutral), and a | Not stated |
| POST | /v1/webhook/create | Create a webhook | Not stated |
| GET | /v1/webhook | List all webhooks | Not stated |
| GET | /v1/webhook/{webhookId} | Get a webhook by ID | Not stated |
| POSTasync | /v1/leads-to-email | Create a leads-to-email workflow from a CSV: enrich the leads, compose AI emails, and enroll them into a sequence | not stated per call; the workflow enriches leads (revealType), which pricing bills in Lead Finder credits (1 per verified email, 6 per verified phone) |
| POSTasync | /v1/leads-to-email/domains | Create a domains-only workflow: the server finds people at the given company domains, enriches them, and delivers the results to your webhook | not stated per call; the workflow enriches leads (revealType), which pricing bills in Lead Finder credits (1 per verified email, 6 per verified phone) |
No endpoint matches that filter.