Skip to content

How to Auto-Enrich beehiiv Subscribers with DataShopper (via Zapier or Webhooks)

Published in General

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

  1. beehiiv Scale plan or higher (API & webhooks enabled)
  2. DataShopper API key
  3. Zapier account (Starter or above)
  4. 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

  1. In Zapier, create a new Zap.
  2. Trigger app: Webhooks by Zapier → Catch Hook.
  3. Copy the unique Zapier URL.
  4. In beehiiv, go to Settings → Integrations → Webhooks, paste the Zapier URL, and select Subscription Created or Subscription Confirmed events.
  5. Send a test webhook in beehiiv. Zapier should catch an example payload with email and subscription_id.

Step 3 — Enrich with DataShopper

  1. Add a new Zapier Action: Webhooks by Zapier → Custom Request.
  2. 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}}" }
  3. Test. You should get enrichment fields back (first_name, last_name, etc.).

Step 4 — Push enrichment back into beehiiv

  1. Add another Zapier Action: Webhooks by Zapier → Custom Request.
  2. 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}}"} ] }
  3. 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.


How can DataShopper help?

From uncovering anonymous visitors to activating data across direct mail, ads, and email—we power smarter marketing through identity, insight, and automation.

See what's possible

Real-time Identity Resolution

Reveal who's visiting your site and turn traffic into leads.

Get started

Audience Activation

Reach your ideal customer across every major channel—automatically.

Get started

B2B & B2C Contact Data

Tap into intent driven consumer and business profiles at scale.

Get started

White-Label & API Access

Plug into our platform with our API or offer it as your own.

Get started