Five products · live in production
Sign-in, email, waitlists, social feeds and web scraping, ready to plug into your app. Your AI agents can use them too, with only the access you give them.
Five products, already built.
Use one or all five. Each has its own API, docs and SDK. One account covers them all.
Open a workspace. Sign in to the console. All five products live in it.
Create an API key. One key works for all five, and you choose what it can do.
Install and call.
npm install productcraft, then pc.auth, pc.mail, pc.waitlist, pc.social or pc.trawl.
Auth
Passkeys, two-factor and organizations, without writing auth.
Add Apple, Google or GitHub sign-in. Setup checks your credentials as you save them. Move your users over from Auth0 or your own database, passwords included, so nobody has to reset.
- Roles your backend can trust. Each user's organization and role travel in their sign-in token, so your API can check them without a lookup.
- An audit log you can export. Every app keeps a log that nobody can edit.
A checklist confirms each setup step, and Try sign-in tests a real sign-in against your app.
Send email from your domain, not ours.
Write templates with a live preview, then send them with one API call.

Demo: Ada's welcome email, delivered.
Proof it arrived. Every message keeps its delivery timeline. Addresses that bounce are blocked from later sends.

Broadcasts. Pick a segment or a topic, see how many people it will reach, then send now or on a schedule.

Your domain, verified. Add the DNS records once and every email is signed as you (DKIM), so receiving servers know it came from you.

Segments that stay current. Define them with rules on contact fields, and preview who matches before you save.
- Retries never send twice. If your code sends the same request twice, the email still goes out once.
- Use your own email provider. Send through any SMTP service, per workspace or per domain.
ProductCraft sends its own email through Mail.
Trawl
Describe the data. Get JSON that matches.
Give it a page, a one-sentence description and a JSON Schema. A browser agent reads the page and returns JSON that fits. Results arrive on a signed webhook.
Describe it The schema and the sentence you send.
The five most recent releases: package name and version.
{ "type": "object", "properties": { "releases": { "type": "array", "maxItems": 5, "items": { "type": "object", "properties": { "package": { "type": "string" }, "version": { "type": "string" } }, "required": [ "package", "version" ] } } }, "required": [ "releases" ] }Get JSON The data the agent returned, checked against your schema.
{ "releases": [ { "package": "productcraft", "version": "0.3.1" }, { "package": "@productcraft/social", "version": "1.0.0" }, { "package": "productcraft", "version": "0.3.0" }, { "package": "@productcraft/waitlist", "version": "0.2.0" }, { "package": "@productcraft/trawl", "version": "0.2.0" } ] }
From the first signup to the first feed.
Waitlist
Signups that don't live in a spreadsheet.

Demo: Grace, Alan and Katherine brought in twelve.
Referrals and A/B tests. Places in line, a referral leaderboard and a different version per landing page.
- Works from a static page. Your signup form posts straight to it, with no backend or API key. The console gives you the snippet.
- Approve, then invite people into your app. Or download the list as a CSV.
One workspace
One workspace. One key. Five products.
Everything you create lives in one workspace, and one sign-in opens all five products in the console.
- sdk
- @productcraft/auth · mail · waitlist · social · trawl, plus the productcraft umbrella. Node.js / TypeScript, server-side, MIT.
- webhooks
- Signed webhooks on all five products, each with Send test, a 30-day event log and replay.
signin.ts
import { ProductCraft } from "productcraft"; // Sign-in acts for the end user: no API key is sent const pc = new ProductCraft(); const consumer = pc.auth.consumer("my-app"); const tokens = await consumer.signin({ identifier: "alice@example.com", password: "...", });
import { ProductCraft } from "productcraft"; // Public route: no API key is sent const pc = new ProductCraft(); const consumer = pc.auth.consumer("my-app"); const tokens = await consumer.signin({ identifier: "alice@example.com", password: "...", });
200 OK
{ "access_token": "eyJ…", "refresh_token": "eyJ…", "token_type": "Bearer", "expires_in": 3600 }
Plain REST, with optional typed SDKs for your server. The docs, the SDKs and the MCP server are all built from one OpenAPI spec.


From your editor
Claude, Cursor and VS Code can work in your workspace.
An MCP server at mcp.productcraft.co. You approve the connection in the browser, a policy preset caps what it may do, and every call lands in the audit log.
demo-lp-launch ("Northwind Tea: autumn menu") has 16 people on it, not counting test signups. All 16 are approved. All of them signed up today, 2026-11-05.
12 of the 16 came through a referral (about 75%). Those referrals came from 3 people:
- Grace Hopper: 6 referrals
- Alan Turing: 4
- Katherine Johnson: 2
First three in the queue:
1. Ada Lovelace (ada@example.com)
2. Grace Hopper (grace@example.com)
3. Alan Turing (alan@example.com), who was referred by Grace
Referral rewards have moved people up the queue. Ada, Grace, Alan and Katherine Johnson (4th) all now share effective position 1. So if you're ranking by effective position, those four are tied at the front, and the original signup order is what breaks the tie.
- Presets: readonly, mail, support, full. No preset lets an agent give itself more access.
- Approve only the products it needs. Within those, it can do whatever your policy allows.
Note what the command leaves out: no token, no key, no secret. The URL is the only setting.
Connect your editorChangelog
Shipped, dated, linked.
Every entry is a production deploy.
- Auth SDK 1.0: every Auth operation as a method, flattened sign-in and typed errors
- Social SDK 1.1: social.community(id).as(actorId) and a method for every route
- Platform SDK 1.0: workspaces, members, API keys and policies as methods
- Waitlist SDK 1.0: lists, a keyless public form client, and webhook verification
- Mail SDK 1.0: emails.send, templates.send, domains.poll and webhook verification
- Trawl SDK 1.0: jobs.create, createAndPoll, typed errors and webhook verification
Get started
The parts every app needs are done. Build the rest.
Start with the product that brought you here. The other four use the same key.
npm install productcraftpnpm add productcraftyarn add productcraftEach product has a free tier large enough to ship a side project on. Pricing is coming soon.




Social
Feeds, follows and ranking you don't have to build.
Demo: the Northwind Tea Club community.
Community analytics. Members, posts, comments and reported content, each with its change over the last 7 days.