UGC Reactions from Real Creators
Real creator library videos at $11 and images at $8. Custom production from $25/video with a $250 minimum. Commercial licensing included.
Own your sales sequencing infrastructure without building it from scratch. Save $2,000+ a month on Outreach, Salesloft, Apollo, lemlist and Customer.io.
MarketingTypeScript · MDXGitHub @lguerbergOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Build your own sales sequencing infrastructure without building it from scratch.
Loading the full README.
Read the full README ↗OpenSequence is an open source, self-hosted API that runs multi-step sequences of email, SMS, call tasks and LinkedIn steps from inside your own product: sales prospecting, recruiting, customer onboarding, renewals, partner outreach, or the sending backend for an AI agent. It has the shape of a self-hosted Svix: one Docker image, a Postgres you own, per-project API keys, and signed webhooks back to your app.
You register senders, contacts and sequences (versioned JSON definitions), enroll people, and read what happened. OpenSequence handles everything in between: scheduling in each contact's time zone, sending from each sender's own inbox, throttling, replies, bounces, opt-outs, meetings booked, exits, analytics, and a webhook when something changes.
It is headless. Bring your own UI, your own CRM and your own infrastructure.
Run it locally with mock providers (no mail server, Allo or Attio account needed):
git clone https://github.com/lguerberg/open-sequence && cd open-sequence
docker compose up
That starts Postgres and the service on http://localhost:8080. Create a project and its API key
with the development operator token:
curl -X POST http://localhost:8080/v1/admin/projects \
-H "Authorization: Bearer dev-admin-token" \
-d '{"slug":"acme","name":"Acme CRM"}'
# -> { "project": "prj_...", "api_key": "sk_live_..." } (the key is shown once)
Install the TypeScript SDK from npm. It is typed from the OpenAPI file.
npm install @opensequence/sdk
Create and publish a sequence:
import { OpenSequence } from '@opensequence/sdk';
const oseq = new OpenSequence({ baseUrl: process.env.SEQ_URL!, apiKey: process.env.SEQ_KEY! });
const { sequence, version } = await oseq.sequences.create({
name: 'UK intro',
definition: {
entry: 'hi',
exit_on: ['reply'],
nodes: {
hi: {
type: 'outreach',
channel: 'email',
action: 'send',
params: { subject: 'Hi {{ contact.first_name }}', body: 'Quick question…' },
},
},
},
});
await oseq.sequences.versions.publish(sequence.id, version.id);
Then, in the same file, enroll someone as one of your reps:
await oseq.senders.upsert('max', { name: 'Max Rivera', email: '[email protected]' });
await oseq.contacts.upsert('dana', { first_name: 'Dana', email: '[email protected]' });
await oseq.sequences.enroll(sequence.id, { contacts: ['dana'], sender: 'max' });
Hear back when something happens, signed with Standard Webhooks:
import express from 'express';
import { OpenSequence, verifyWebhook } from '@opensequence/sdk';
const oseq = new OpenSequence({ baseUrl: process.env.SEQ_URL!, apiKey: process.env.SEQ_KEY! });
const { secret } = await oseq.webhooks.create({
url: 'https://crm.acme.com/hooks/seq',
event_types: ['enrollment.exited'],
});
const app = express();
app.post('/hooks/seq', express.raw({ type: '*/*' }), (req, res) => {
const event = verifyWebhook({ secret, headers: req.headers, body: req.body });
console.log(event.type, event.data.exit_reason); // enrollment.exited reply
res.sendStatus(204);
});
app.listen(3000);
Prefer plain HTTP? Every call above is one request; see the API reference.
Run the MCP server (packages/mcp) next to the service and connect any MCP client
with a project key:
claude mcp add --transport http opensequence https://mcp.your-domain.com/mcp \
--header "Authorization: Bearer sk_live_..."
The agent gets tools to validate sequence definitions, check sender readiness, preview and enroll
contacts, follow a contact's journey, work tasks and read analytics. A key scoped to enroll
cannot touch senders or settings, and the engine refuses double enrollment for agents too.
This is the beginning of the README. Read the rest at the original. Read the full README ↗