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

CSV to Emelia list, with updates and a failure report
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

Webhook receiver that pushes replies to a 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

Full campaign by API, paused until I approve
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

Email finder on a CSV, with cost control
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

What is working, what to change
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

TypeScript client from the OpenAPI spec
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 .md pages 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.

On this page