Posthawk
Contacts & Audience

Built-in audience
management

Collect subscribers from your forms, organize contacts with tags, and send to segments — no external mailing list service needed.

Contact Management

Add and import
contacts

Create contacts one at a time or bulk import up to 1,000 at once. Each contact can have a name, tags, and custom metadata.

TypeScript
import { Posthawk } from 'posthawk';const posthawk = new Posthawk('ck_live_...');// Add a contact from your signup formawait posthawk.contacts.create({  email: 'alice@example.com',  name: 'Alice',  tags: ['newsletter', 'beta-users'],});// Bulk import contactsawait posthawk.contacts.import([  { email: 'bob@example.com', tags: ['newsletter'] },  { email: 'carol@example.com', tags: ['beta-users'] },]);
TypeScript
// 1. Pull every contact with this tagconst { contacts } = await posthawk.contacts.list({  tag: 'newsletter',});// 2. Fan out — the worker rate-limits to 14/sec//    and skips any contact marked unsubscribed.await Promise.all(  contacts.map((c) =>    posthawk.emails.send({      from: 'hello@yourapp.com',      to: c.email,      subject: 'Weekly Update',      html: '<p>Here is your weekly update...</p>',    }),  ),);// Or use Broadcasts for a one-shot scheduled// send to every contact in a tag.
Segmented Sending

Send to a tag,
reach everyone

Replace hardcoded recipient lists with tags. One API call sends to all contacts with that tag — unsubscribed contacts are automatically excluded.

Form Integration

Capture subscribers
from any form

Add a single API call to your newsletter signup, contact form, or registration flow. Contacts are created instantly with the tags you choose.

HTML + JavaScript
<!-- HTML form on your website --><form id="newsletter-form">  <input type="email" name="email" required />  <button type="submit">Subscribe</button></form><script>document.getElementById('newsletter-form')  .addEventListener('submit', async (e) => {    e.preventDefault();    const email = e.target.email.value;    await fetch('https://api.posthawk.dev/v1/contacts', {      method: 'POST',      headers: {        'Content-Type': 'application/json',        'X-API-Key': 'ck_live_...',      },      body: JSON.stringify({        email,        tags: ['newsletter'],      }),    });  });</script>
Getting started

Three steps to
audience management

01

Add contacts

Create contacts via API, dashboard, or capture them from your website forms with a single POST request.

02

Organize with tags

Tag contacts as "newsletter", "beta-users", or any custom label. Filter and manage your audience by tag.

03

Send by tag

Use Broadcasts to schedule a campaign to a tagged list, or pull contacts via the SDK and fan out individually.

Workspace-Scoped Contacts

Every contact belongs to a workspace. Isolated data, team access, and per-workspace audience management.

Tag-Based Segmentation

Organize contacts with tags like "newsletter", "beta-users", or "onboarding". One contact can have multiple tags.

Tag-Driven Broadcasts

Build a recipient list from a tag, then send via Broadcasts or fan out with the SDK. Unsubscribed contacts are skipped automatically.

Unsubscribe Handling

Mark contacts as unsubscribed via API. Tag-based sends automatically skip unsubscribed contacts.

Use cases

Replace your
mailing list tool

Stop maintaining a separate Mailchimp or SendGrid contact list. Posthawk contacts live alongside your email sending — one platform, one API.

Newsletter signups

Capture email addresses from your website footer or signup forms. Tag as "newsletter" and send updates.

Contact forms

Save every contact form submission as a contact with metadata. Track inquiries alongside your audience.

User onboarding

Tag new signups with "onboarding" and send welcome sequences to the entire cohort.

Start building your audience

Add your first contact in seconds. Free tier includes up to 3,000 emails per month.

Cookie Preferences

We use analytics cookies to understand how you use our site and improve your experience. Privacy Policy