Build with AI
Prompts ready to paste into Claude, ChatGPT or Cursor to build the most common Emelia integrations, with the documentation they need.
Each prompt below points the assistant to the Markdown version of the right pages, so it works from the documentation instead of from memory. Copy, paste, adjust the parts in capitals.
Give your assistant the docs
For long sessions, give it the whole documentation once: https://docs.emelia.io/llms-full.txt. In Claude, the emelia-api skill does the same job automatically.
Load a CSV into a list
Read https://docs.emelia.io/docs/lists.md and https://docs.emelia.io/docs/rate-limits.md.
Write a Node.js script (no dependency, Node 20+) that:
1. reads the CSV file given as first argument (columns: first_name, last_name, email, company, linkedin_url, CUSTOM_COLUMNS),
2. renames the columns to the Emelia standard fields (firstName, lastName, email, companyName, linkedinUrlProfile) and keeps the others as custom variables,
3. sends the rows to the Emelia list LIST_ID with POST /lists/list/{listId}/contacts/batch?updateIfExists=true, 100 rows per call,
4. prints the totals (created, duplicates, updated, failed) and writes the failed rows with their error to failed.csv.
Read the API key from EMELIA_API_KEY and trim it. Stop and print the error on a non 2xx answer.Sync replies to your CRM
Read https://docs.emelia.io/docs/webhooks.md and https://docs.emelia.io/docs/replies.md.
Build a small Express server that receives Emelia webhooks on POST /emelia/:token:
- reject requests whose token is not EMELIA_WEBHOOK_TOKEN,
- answer 200 immediately, then process the event,
- on MAIL_REPLIED and LINKEDIN_REPLIED, find the contact by email in CRM_NAME and add a note with the reply and the campaign name,
- if sentiment.classification is INTERESTED, also create a task for the owner,
- deliveries are not signed and can come twice or out of order: deduplicate on event, campaign, contact email and step.Create a campaign from a brief
Read https://docs.emelia.io/docs/campaigns.md.
Using the Emelia API, create a campaign named "CAMPAIGN_NAME":
- a sequence of 3 emails: day 0, day 3, day 8, follow-ups in the same thread, unsubscribe link from the 2nd email,
- leave out every step _id except "START", so the server generates them,
- schedule Monday to Friday, 9:00 to 17:30, Europe/Paris, 20 new contacts per day,
- identities: only the mailboxes of the domain SENDER_DOMAIN (list them first with GET /email-providers and ask me to confirm),
- recipients: the list LIST_NAME.
Read the campaign back after each call. Send me a test email at MY_EMAIL, then stop: do not start the campaign.Enrich a list without wasting credits
Read https://docs.emelia.io/docs/enrichment/email-finder.md and https://docs.emelia.io/docs/credits.md.
Write a Python script that finds the professional email of every row of leads.csv (full_name, company, website, country):
- skip rows without a company or a country, and say how many,
- print the maximum cost in credits and ask for confirmation before starting,
- start all the jobs first, then poll them every 3 to 5 seconds, with a 5 minute limit per job,
- keep each jobId in the output, so a job still running can be read later,
- never send the same job twice,
- stop at the first "not enough credits" error,
- write leads_enriched.csv with email, qualification and status.Audit a campaign with the MCP server
Use the Emelia MCP server (https://docs.emelia.io/docs/ai/mcp.md).
For my campaign "CAMPAIGN_NAME":
1. get its configuration and its statistics for the last 30 days, per step and per version,
2. tell me which step brings the replies and which one costs unsubscribes,
3. compare the A/B versions on replies, not on opens,
4. check the warmup score of the mailboxes it uses,
5. give me one recommendation, not a list.
Do not change anything in the account.Generate a typed client
Download https://docs.emelia.io/openapi/emelia.json.
Generate a small, dependency free TypeScript client for these endpoints only: create a list, add contacts in bulk, find a contact by email, update a contact, create a campaign, update its recipients, start and pause it.
- read the key from an option, send it raw in the Authorization header,
- throw an error that carries the HTTP status and the `code` and `error` (or `message`, on /lists routes) of the body,
- treat an HTTP 500 {"error": "Internal server error"} as the per minute quota: wait 60 seconds and retry once,
- add a `paginate` helper for GET /lists/list/{listId}/rows (page from 1, pageSize 100).Tips
- Point to pages, not to the whole site. Two or three
.mdpages give better code than a vague "use the Emelia API". - Ask it to read back. After each write, the campaign or the contact read back shows what Emelia actually stored.
- Keep the confirmations. Ask the assistant to stop before anything that sends a message, deletes data or spends credits.
Claude skill
Download the emelia-api skill, one SKILL.md that teaches Claude the Emelia API, its rules and its traps, so the code it writes works the first time.
Docs for AI agents
llms.txt, llms-full.txt, a Markdown version of every page and the OpenAPI specs. Everything an agent needs to read these docs.