Turn every new subscriber into a fully profiled contact—automatically. In this guide you’ll wire up beehiiv with the DataShopper “Get Data By Email” API so every signup is instantly enriched.
We’ll start with the Zapier (no-code) approach, and then show a lightweight custom webhook method for developers.
What you’ll build
Flow:
beehiiv (Subscription Created/Confirmed webhook) → Zapier or custom endpoint → DataShopper API (enrich by email) → beehiiv API (update custom fields)
Why this works:
- beehiiv emits real-time webhooks on subscriber events
- DataShopper provides a POST endpoint to enrich a profile by email
- beehiiv supports custom fields and lets you update subscriptions via API
Option 1 — Zapier (No-Code)
This option is the fastest way to get enrichment live without writing code.
Prerequisites
- beehiiv Scale plan or higher (API & webhooks enabled)
- DataShopper API key
- Zapier account (Starter or above)
- Custom fields created in beehiiv (e.g.,
first_name,last_name,company,phone)
Step 1 — Create custom fields in beehiiv
In Audience → Subscribers → Custom Fields, create the fields you want to map enriched data into. Use consistent lowercase names.
Step 2 — Set up a Zapier trigger
- In Zapier, create a new Zap.
- Trigger app: Webhooks by Zapier → Catch Hook.
- Copy the unique Zapier URL.
- In beehiiv, go to Settings → Integrations → Webhooks, paste the Zapier URL, and select Subscription Created or Subscription Confirmed events.
- Send a test webhook in beehiiv. Zapier should catch an example payload with
emailandsubscription_id.
Step 3 — Enrich with DataShopper
- Add a new Zapier Action: Webhooks by Zapier → Custom Request.
- Configure:
- Method:
POST - URL:
https://main.dashboard.datashopper.com/api/v2/GetDataByEmail - Headers:
Authorization:{{your_DataShopper_API_key}}Content-Type:application/json
- Data:
{ "email": "{{123456789__data__email}}" }
- Method:
- Test. You should get enrichment fields back (
first_name,last_name, etc.).
Step 4 — Push enrichment back into beehiiv
- Add another Zapier Action: Webhooks by Zapier → Custom Request.
- Configure:
- Method:
PUT - URL:
https://api.beehiiv.com/v2/publications/{{your_publication_id}}/subscriptions/{{123456789__data__id}} - Headers:
Authorization:Bearer {{your_beehiiv_API_key}}Content-Type:application/json
- Data:
{ "custom_fields": [ {"custom_field_id": "first_name", "value": "{{DataShopper.first_name}}"}, {"custom_field_id": "last_name", "value": "{{DataShopper.last_name}}"}, {"custom_field_id": "company", "value": "{{DataShopper.company}}"}, {"custom_field_id": "phone", "value": "{{DataShopper.phone}}"} ] }
- Method:
- Test. The subscriber in beehiiv should now show enriched details.
Step 5 — Turn the Zap on
From now on, every new subscriber is automatically enriched via DataShopper.
Option 2 — Direct Webhook + Custom Code
If you’d rather not use Zapier, you can run a simple webhook receiver on your server.
Process
beehiiv webhook → Your endpoint → DataShopper API → beehiiv API update
Example: Node.js (Express)
import express from "express";
import fetch from "node-fetch";
const app = express();
app.use(express.json());
const DATASHOPPER_API = "https://main.dashboard.datashopper.com/api/v2/GetDataByEmail";
const DATASHOPPER_KEY = process.env.DATASHOPPER_KEY;
const BEEHIIV_KEY = process.env.BEEHIIV_KEY;
const PUBLICATION_ID = process.env.BEEHIIV_PUBLICATION;
app.post("/webhooks/beehiiv", async (req, res) => {
const email = req.body?.data?.email;
const subscriptionId = req.body?.data?.id;
if (!email || !subscriptionId) return res.status(200).json({ok:true});
// Enrich with DataShopper
const dsResp = await fetch(DATASHOPPER_API, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": DATASHOPPER_KEY
},
body: JSON.stringify({ email })
});
const dsJson = await dsResp.json();
// Map results into beehiiv
const mapped = [
{ custom_field_id: "first_name", value: dsJson?.first_name },
{ custom_field_id: "last_name", value: dsJson?.last_name },
{ custom_field_id: "company", value: dsJson?.company },
{ custom_field_id: "phone", value: dsJson?.phone }
].filter(f => f.value);
if (mapped.length) {
const putUrl = `https://api.beehiiv.com/v2/publications/${PUBLICATION_ID}/subscriptions/${subscriptionId}`;
await fetch(putUrl, {
method: "PUT",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${BEEHIIV_KEY}`
},
body: JSON.stringify({ custom_fields: mapped })
});
}
res.status(200).json({ok:true});
});
app.listen(3000, () => console.log("Webhook listening"));
FAQs
Do I need coding skills?
Not if you use Zapier—everything can be configured visually.
Which beehiiv event should I use?
Most use Subscription Confirmed to enrich only verified emails.
Can I enrich later, not just on signup?
Yes. You can trigger on clicks, segment entries, or other beehiiv automation events.
Wrap-Up
With either Zapier (no code) or a custom webhook (code-friendly), you can turn every beehiiv subscriber into a complete profile using DataShopper. That means stronger segmentation, better personalization, and higher ROI from your email list.