Mailchimp Lead Sync
Keep Mailchimp audiences current with app leads without creating duplicate contacts.
What it adds
A one-way sync that pushes new and changed leads into a chosen Mailchimp audience with mapped fields and tags.
What your agent is told to do
5
What your agent is told to do
5-
1
Find every place a lead is created or a profile changes — signup forms, imports, admin edits, checkout — and route all of them through a single sync path rather than calling the provider from each one.
-
2
Normalize the email address before matching: trim it, lowercase the domain, and resolve any display form to the plain address. Use that normalized value as the only match key, so the same person entering twice updates one member instead of creating a second.
-
3
Let a workspace admin choose the destination audience and map app fields and tags to it, and send only the fields the app genuinely owns. Leave everything else untouched rather than writing empty values over data the marketing team maintains.
-
4
Reuse the app's existing background-job system for every write, with retry and exponential backoff when the provider rate-limits, and never let a slow or failing provider hold up the response to the person signing up.
-
5
Do not treat the app as the authority on subscription state. When the provider reports a member as unsubscribed, cleaned, or archived, record that locally and stop sending — pushing them back to subscribed is how an app generates spam complaints.
Edge cases it handles
8
Edge cases it handles
8- Email addresses arrive with mixed casing, surrounding whitespace, and display-name wrappers. Without normalization before the lookup, the same person is matched as a new member each time and the audience fills with near-duplicates.
- Marketing teams enrich contacts by hand with data the app never had. A mapping that writes every mapped field on every update will erase that work, so send only fields the app owns and skip blanks rather than clearing the remote value.
- Members can be subscribed, unsubscribed, cleaned, pending, or archived, and each one means something different. Sending to a cleaned address damages sending reputation, and resubscribing an archived member without a fresh opt-in is a compliance problem.
- Both the provider's webhook retries and the app's own job retries will deliver the same event more than once. Every write needs a stable idempotency key derived from the lead and the change, or a single signup applies its tag three times and re-triggers the welcome automation.
- When a workspace disconnects its account, in-flight and queued jobs must stop immediately and stored credentials must be deleted. A queue that drains after disconnection keeps writing to an account the customer believes is detached.
- Stored tokens expire and can be revoked from the provider's side. Refresh ahead of expiry, and when refresh fails, mark the connection broken, surface it in the app, and hold events rather than discarding them.
- An audience can be deleted or renamed after the mapping is saved. Detect the missing destination, pause the sync with a clear message naming the audience, and do not silently fall back to a different one.
- When the provider is down, the app must still complete the signup and show success. Queue the sync, show its status on the lead record, and never present a provider outage as a failure of the user's own action.
Definition of done
9
Definition of done
9- A lead entered twice with differently formatted versions of the same address results in one member, not two.
- Repeated deliveries of the same event apply a tag or automation enrollment exactly once.
- Fields the app does not own, and blank app values, never overwrite existing member data.
- Unsubscribed, cleaned, and archived members are recorded locally and receive no further sends.
- Disconnecting an account halts queued and in-flight syncs and removes stored credentials.
- An expired or revoked token surfaces as a visible broken connection with events held rather than lost.
- Signup succeeds and the user sees success even while the provider is unreachable.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Mailgun Transactional Email
Mailgun Transactional Email
Send transactional email through Mailgun without losing bounce and complaint state.
What it does
A Mailgun delivery path bound to the correct region and sending domain, with durable suppression and event handling.
How it works
- 1 Put Mailgun behind the app's existing mail layer as one adapter. It is an alternative to the other transactional email integrations, not an addition; whichever adapter is in place, the template contract and suppression handling above it are unchanged.
- 2 Bind the region and sending domain in server-side configuration and validate at startup that they are consistent. A credential issued in one region will simply not work against another, and the failure looks like an authentication problem rather than a configuration one.
- 3 Check the suppression state for an address before a message is queued, not after the provider rejects it, so bouncing and complaining addresses stop consuming send attempts.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/mailgun-transactional-email
Firebase Cloud Messaging
Firebase Cloud Messaging
Deliver push through Firebase with registration tokens that stay valid as devices change.
What it does
A Firebase-backed push channel with server-side token lifecycle management, consistent payload handling across platforms, and safe handling of the routes a notification opens.
How it works
- 1 Store one record per device registration, tied to the account signed in at the time, the platform it came from, and when it was last confirmed working, and let one account hold many of them.
- 2 Send from the app's existing background-job system with the provider credentials held server-side, and treat every send as a job that can be retried rather than work done inline during a request.
- 3 Decide, per notification type, whether the payload is meant to be displayed by the platform or handled by the app, and keep that decision the same on every platform. The same event behaving as a visible alert on one platform and a silent update on another produces bugs nobody can reproduce.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/firebase-cloud-messaging
Slack Channel Alerts
Slack Channel Alerts
Send the events a team actually needs into a Slack channel without flooding it.
What it does
Operator-configured routing of selected app events into Slack channels, with grouping, throttling, and reliable delivery.
How it works
- 1 List the events genuinely worth interrupting a team for — failed payments, high-value signups, error thresholds, approvals waiting — and make each individually selectable per channel. An all-or-nothing firehose gets muted within a week and then nobody sees the one that mattered.
- 2 Run the connection through the provider's authorisation flow, then confirm the workspace and channel at setup by posting a test message the operator has to acknowledge. Store the resulting credential server-side only.
- 3 Write each message so it stands alone: what happened, to whom, when, and a link back into the app. Optional fields that are absent must be omitted cleanly rather than rendering as empty labels.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/slack-channel-alerts
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.