New You can now talk to your Gelee agent from Claude, ChatGPT or Cursor through our MCP. Read the docs →
Home Resources and free tools Blog Switch to Gelee Docs Pricing Book a Demo

Expandi alternative

The Expandi alternative that books the call

Keep what works. Add live signals, lists that refill themselves and replies drafted for you.

Why teams switch

Why people leave Expandi.

1

Replies are on you

We didn't find AI reply drafting on Expandi's pricing page. Gelee drafts every reply.

2

No buying signals

Gelee reaches out when someone is hiring, raised or changed jobs, not just when they're next on a list.

3

Webhooks, but no full API

Expandi documents webhooks. Gelee has a full API and an MCP, so your tools can write back.

What you get

Everything, on every plan.

Live buying signalsLists that refill themselvesEvery lead enrichedOnly your ICP, everBest people firstMore ways to find peopleBest accounts on best prospectsEvery account, tunedSmart warm-upFree InMailsReplies drafted for youUpdates in SlackSet up for youAPI, webhooks and MCP

Side by side

Gelee vs Expandi.

FeatureGeleeExpandi
Finding buyers
Live buying signals (hiring, funding, job changes)✓✕
Evergreen lists that add new matches every day✓✕
Every lead enriched automatically✓✕
ICP filters checked before every send✓✕
Scores every lead before reaching out✓✕
Reaching them
Routes your best accounts to your best prospects✓✕
Per-account limits for invites, messages, reads, likes and comments✓Some actions
Smart warm-up and ramp-up✓✕
Post engager campaigns✓✕
Keyword and follower campaigns✓✕
Free InMails to Open Profiles✓✕
Blacklist✓✓
Replies and booking
AI drafts replies and sends your booking link✓✕
One inbox for every account✓✓
Custom Slack notifications✓✕
Setup and plumbing
Set up for you by our team✓✕
CRM integrations✓✓
Public API and webhooks✓Webhooks only
MCP for Claude and ChatGPT✓✓

How to switch

8 steps. We do them with you.

  1. Export your Expandi contacts

    Export each campaign's contacts to CSV from Expandi. Keep the LinkedIn profile URL, name, company, title, tags and any custom placeholders you use in messages, plus each contact's status so you know who has been reached.

  2. Bring your do-not-contact list over first

    Do this first. Before a single lead goes in. Export your Expandi blacklist and add everyone already contacted that you do not want to hear from Gelee.

    Then send it over in one call, or add it in the app's Settings. People and whole companies both work, and sending the same list twice won't break anything. Gelee checks it when someone joins a campaign and again right before every message.

    curl -X POST "https://www.gelee.ai/api/v1/blacklist" \
      -H "Authorization: Bearer gk_your_key" \
      -H "Content-Type: application/json" \
      -d '{"entries":[
            {"value":"https://www.linkedin.com/in/janedoe","type":"account"},
            {"value":"Acme Corp","type":"company"}
          ]}'
  3. Connect your LinkedIn seats

    Whoever sends the outreach connects their LinkedIn in the Gelee app, under Accounts. It takes a minute.

    One rule matters more than the rest: don't let Expandi and Gelee both run campaigns from the same seat at the same time. Neither tool knows what the other sent, and LinkedIn sees both. Pause that seat's Expandi campaigns first, then switch it on in Gelee.

    Brand new or rested account? Turn on warm-up and it starts slow.

  4. Swap your message variables

    Paste your Expandi messages into Gelee steps and swap the variables. If a variable comes back empty, Gelee drops that sentence instead of sending a blank, so you don't need a fallback on every one.

    Anything of your own, like a report link or a finding, becomes a custom field: {{custom.field_name}}. If a step needs a field that isn't there yet, it waits for it (up to a day). Handy if you write the link onto the lead when they accept.

    • first name → {{firstName}}
    • company name → {{company}}
    • a custom placeholder → {{custom.field_name}}
  5. Rebuild the campaign

    Rebuild the main path of each Expandi campaign as Gelee steps: the invite note, then each message with its wait. Profile visits, follows, likes and endorsements are not Gelee steps.

    If you used Expandi's interest status to route replies, Gelee's AI SDR sorts replies for you and flags them interested or not, and needs_human tells you when one needs a person.

  6. Add your leads

    Make the campaign, then add people however's easiest: upload the CSV, push them with the API, or point Zapier or Clay at the campaign's intake URL. All Gelee needs is the LinkedIn URL.

    Leave out anyone Expandi already reached, unless you actually want a second touch. Gelee won't put the same person in two of your campaigns anyway.

    If tools post into an Expandi reversed webhook today, point them at the Gelee campaign's intake URL instead: it accepts the same kind of pasted URL and reads profile_link as the LinkedIn URL.

    curl -X POST "https://www.gelee.ai/api/v1/campaigns/CAMPAIGN_ID/leads" \
      -H "Authorization: Bearer gk_your_key" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: import-batch-1" \
      -d '{"leads":[{"linkedin_url":"https://www.linkedin.com/in/janedoe",
                    "first_name":"Jane","company":"Acme","title":"VP Sales",
                    "custom_fields":{"report_link":"https://acme.example/r/5d70"},
                    "tags":["imported"]}]}'
  7. Repoint your integrations

    Map each Expandi webhook to the Gelee event in the table above.

    In Gelee, add a webhook under Settings, Event Destinations (or POST /webhooks). Every event comes with the person, the seat that sent and the campaign. Hit Test to get a full sample before anything real flows.

    Leave the Expandi one running until you cut over, so your CRM doesn't have a gap.

  8. Run both for a bit, then cut over

    Don't move everything on day one. Start with a seat or two, run them next to Expandi for a few weeks, and look at accepts, replies and booked calls. Split by seat, never by person.

    Happy? Pause the rest of Expandi, export one last time, move the remaining seats. Keep that last export. It's your record of who was contacted before.

Let AI do it

Let our AI move it.

The Gelee MCP already knows Expandi. Connect it to Claude or ChatGPT and ask it to move you over. It checks with you before anything sends.

Set up the MCP

Questions

Good to know.

What replaces Expandi's reversed webhooks?

Each Gelee campaign has an intake URL you can paste into any tool, with no key or headers, and POST /campaigns/{id}/leads for code. To pause or resume one lead, use POST /prospects/{id}/pause and /resume.

Does Gelee have an equivalent of Expandi's 'Contact replied' webhook?

Yes: reply_received, plus reply_positive and reply_negative sorted by sentiment, each with the person, the seat that sent and the campaign.

Can I run Expandi and Gelee at the same time?

Yes. Just don't run both on the same LinkedIn seat at once, and don't let them message the same people. Split by seat and you're fine.

Will I lose my Expandi conversation history?

No. The conversations live on LinkedIn, so they show up in Gelee once the seat connects. What doesn't come over is the other tool's own notes, tags and stats. Export those before you cancel.

Do I need the API to switch?

No. You can do all of this in the app. The API is there if you'd rather your own systems do it.

For developers: API calls, webhooks and variables

Expandi's help center documents two ways to automate. Webhooks, set under LinkedIn Settings, Webhooks, send a POST to your URL on 25 events, from replies and accepted invites to email opens and "account has nothing scheduled". "Reversed webhooks" are per-campaign URLs that add a lead (by profile_link) or pause and resume one.

Its help center notes that leads sent by webhook cannot enter a campaign that uses Signals. We did not find a broader public REST API in Expandi's own documentation.

Their words, our words

ExpandiGeleeNotes
CampaignCampaign
LinkedIn accountSeat
Contact / prospectLead
Tags and interest statusTags and inbox flagsinterested, lost, referral, follow-up.
Reversed webhook URLIntake URL, or POST /campaigns/{id}/leadsThe intake URL also takes a pasted URL with no key.
Smart inboxInboxWith the AI SDR drafting or sending replies.
BlacklistBlacklist

API calls

ExpandiGeleeNotes
Reversed webhook: add lead (profile_link)POST /campaigns/{id}/leads, or the campaign's intake URLThe intake URL reads loose field names, so profile_link works as is.
Reversed webhook: pause / resume leadPOST /prospects/{id}/pause, /resumeOr POST /inbox/stop with LinkedIn URLs.
(not in Expandi's docs)GET /prospects, /people, /inbox, /campaignsRead everything back with the whole story per lead.
(not in Expandi's docs)POST /inbox/{chat_id}/messages, POST /conversationsSend from your own code.
(not in Expandi's docs)PATCH /prospects/{id}Custom fields, tags, flags, outcomes.

Webhooks

ExpandiGelee webhookNotes
Contact replied, Contact replied to campaign messagereply_receivedPlus reply_positive / reply_negative.
Contact replied first time since startreply_receivedCheck timeline.first_reply_at.
Connection request accepted (by contact in active campaign)connection_accepted
Connection request sentinvite_sentPick by name.
Message sentmessage_sentPick by name.
Contact revokedinvite_withdrawn
Contact tagged, Contact interest status changedlead_updatedFires for changes made through the API or the assistant.
Contact added to campaignlead_accepted (API pushes)Fires once the verdict on a pushed lead lands.
Campaign finishedcampaign_completed
LinkedIn account has nothing / no messages / no invites scheduledGET /healthPlanned versus sent, with the reasons for any gap.
Visit, follow, like, endorsement sent; email eventsNo webhook

Message variables

ValueGelee variable
First name{{firstName}}
Full name{{fullName}}
Company{{company}}
Job title{{role}}
Industry{{industry}}
Your own per-lead field{{custom.your_field}}
A fallback when empty{{custom.your_field|default text}}
Sender's name{{senderName}}

Discovery call

Moving from Expandi? We'll plan it with you.

A quick call. We learn about your market, and if it's a fit we'll move you over.