Integrations
New subscribers can land in the tool you already work in, the moment they sign up. Integrations are a Pro feature and live in the Integrations tab of the dashboard.
Every integration fires on one event: someone submits an email address on your page, through the email capture block or the page gate. There is no scheduled sync and no backfill, so connecting a provider today does not push the subscribers you collected last month. Repeat submissions of an address you already have are ignored and do not fire again.
Fields save when you click away from them. Credentials are stored against your account, read only on the server, and never sent to your public page.
On the free plan

Open the tab without Pro and you get the summary rather than the fields: Google Analytics and Meta Pixel on your page, sending captured emails to Klaviyo, Mailchimp, or beehiiv, and webhooks for anything else, with an upgrade button under them. The fields themselves appear as soon as the plan changes.
Klaviyo
Two fields:
- Klaviyo private API key. Create it in Klaviyo under account settings.
- List or segment ID. The id of the list you want new addresses added to.
On each signup urls.bio creates the profile in Klaviyo with a source property of urls.bio, then adds that profile to the list you named. Both fields are needed: leave either blank and the integration sits idle.
Mailchimp
Two fields:
- Mailchimp API key.
- Audience ID. Mailchimp calls it an audience; the field wants that id.
There is no data center field. Mailchimp keys carry their data center on the end, after the hyphen, and urls.bio reads it from the key itself.
Subscribers are added with a status of subscribed, which means Mailchimp sends no confirmation email of its own. Each one arrives with a SOURCE merge field of urls.bio.
beehiiv
Two fields:
- beehiiv API key.
- Publication ID.
Subscribers are created against that publication with a UTM source of urls.bio and a UTM medium of integration. beehiiv's welcome email is not triggered, and existing subscribers are not reactivated.
Webhooks
One field, webhook URL, which has to be a public https:// address. Anything else is rejected before it saves.
Each signup sends a POST to that URL:
{
"event": "email_submission",
"data": {
"profile": "yourname",
"email": "someone@example.com",
"timestamp": "2026-08-23T10:04:11.000Z"
}
}The request carries an X-Webhook-Signature header holding an HMAC-SHA256 of the exact body, so your endpoint can prove the call came from urls.bio rather than from someone who guessed your URL. Verify it against the body bytes before you trust the payload.
If your endpoint returns a 5xx or the connection fails, urls.bio retries three times, backing off about two seconds, then four, then eight. Any other failing status is not retried, so a 400 from your own validation is the end of it.
A working endpoint should answer quickly and do its real work afterwards. Nothing on your page waits for it, but a slow endpoint is a slow endpoint.
When something does not arrive
A failing integration never breaks the signup. The visitor still sees their confirmation and the address still lands in your Audience tab, whatever your email tool does with it.
That also means a wrong key fails quietly. There is no error in the dashboard, no red mark on the field, and no email telling you. So the one habit worth having is this: connect the integration, then submit a test address on your own page from a different browser or a private window, and check it arrived on the other side. Do that once per provider and you never wonder again.
There is no sync status or retry queue in the dashboard today. If a batch of addresses did not make it across, export the CSV from Audience and import it on the other side.
Two other things to rule out before blaming the key:
- The plan. The sync is checked against Pro on the server at the moment the address arrives. A subscription that lapsed stops the sync, quietly, while email capture itself keeps working.
- The blank field. Every provider needs both of its fields. One filled and one empty is the same as none.
Analytics tags
The same tab holds two fields that have nothing to do with subscribers:
- Google Analytics ID, in the form
G-XXXXXXXXXX - Meta Pixel ID
These load your own tags on your public page, so your traffic shows up in your own accounts alongside the numbers in analytics. urls.bio never loads its own analytics on your page.
Both are third-party scripts running on a page your visitors see, so tell them, and keep your own privacy notice honest about it.
Common questions
Can I send to two providers at once? Yes. Every provider you have filled in fires on the same signup, independently. One failing does not stop the others.
Does the webhook fire for contact form replies? No. The event is an email submission, from the capture block or the page gate.
Do subscribers collected before I upgraded get pushed across? No. There is no backfill. Export the CSV from Audience and import it once, then let the integration take everything after that.
What happens to my keys if I go back to Free? They stay stored and stop being used. Upgrading again resumes the sync with no retyping.