Valley alternative
The Valley 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 Valley.
Autopilot when you're ready
Approve every reply, or let the AI SDR run once you trust it.
Live signals and evergreen lists
Gelee finds people the day something happens, and keeps the list full.
Set up for you
We build your ICP, signals and first campaigns with you.
What you get
Everything, on every plan.
Side by side
Gelee vs Valley.
| Feature | |||
|---|---|---|---|
| Finding buyers | |||
| Live buying signals (hiring, funding, job changes) | ✓ | ✓ | |
| Evergreen lists that add new matches every day | ✓ | ✕ | |
| Every lead enriched automatically | ✓ | Email enrichment | |
| 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 | ✓ | ✕ | |
| 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 | ✓ | Done-for-you only | |
| CRM integrations | ✓ | ✓ | |
| Public API and webhooks | ✓ | ✓ | |
| MCP for Claude and ChatGPT | ✓ | ✓ | |
How to switch
8 steps. We do them with you.
Export your Valley prospects
Export prospects with LinkedIn URLs and any fields you use, through the API or the app.
Bring your do-not-contact list over first
Do this first. Before a single lead goes in. Collect your exclusions and anyone already contacted.
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"} ]}'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 Valley 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 Valley campaigns first, then switch it on in Gelee.
Brand new or rested account? Turn on warm-up and it starts slow.
Swap your message variables
Paste your Valley 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 →
{{company}} - a custom field →
{{custom.field_name}}
- first name →
Rebuild the campaign
Rebuild each campaign's steps. If you relied on approving every message, use Gelee's approval mode: the AI drafts replies and a person approves them in the app, in Slack or through
GET /drafts.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 Valley already reached, unless you actually want a second touch. Gelee won't put the same person in two of your campaigns anyway.
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"]}]}'Repoint your integrations
Map Valley's webhook events to Gelee's using 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 Valley one running until you cut over, so your CRM doesn't have a gap.
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 Valley for a few weeks, and look at accepts, replies and booked calls. Split by seat, never by person.
Happy? Pause the rest of Valley, 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 Valley. Connect it to Claude or ChatGPT and ask it to move you over. It checks with you before anything sends.
Set up the MCPQuestions
Good to know.
Can I run Valley 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 Valley 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.
How long does a switch take?
Setup is about a day. The part that takes time is watching both side by side for a few weeks before you move everything.
For developers: API calls, webhooks and variables
Valley has a JSON REST API at api.joinvalley.co (x-api-key header, OpenAPI schema) covering campaigns, prospects, approvals, inbox, warm lists and analytics, an MCP server, and webhooks it describes as 19 event types (replies, accepted connections, interest changes, prospects added or removed, new outreach and more). Its site says AI agents cannot send outreach on their own: changes need approval.
Their words, our words
| Valley | Gelee | Notes |
|---|---|---|
| Campaign | Campaign | |
| Prospect | Lead | |
| Approvals | Drafts | GET /drafts, approve or skip. |
| Warm list | Campaign leads | |
| LinkedIn account | Seat |
API calls
| Valley | Gelee | Notes |
|---|---|---|
Prospects | GET /prospects, /people, POST /campaigns/{id}/leads | |
Approvals | GET /drafts, POST /drafts/{id}/approve, /skip | On the Gelee API, your request is the approval. |
Inbox | GET /inbox, GET /inbox/{chat_id}/messages, POST …/messages | |
Analytics | GET /analytics/daily, /campaigns/{id}/performance, /health |
Webhooks
| Valley | Gelee webhook | Notes |
|---|---|---|
| Reply events | reply_received, reply_positive, reply_negative | |
| Accepted connection | connection_accepted | |
| Interest change | lead_updated, reply_positive | |
| Prospect added / removed | lead_accepted, lead_updated (removed) | |
| New outreach | invite_sent, message_sent | Pick by name. |
Message variables
| Value | Gelee 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 Valley? 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.
