Webhooks
Webhooks let external services push data into your Donotname tables. When a webhook URL receives an HTTP request, it can trigger an automation that processes the incoming data and creates or updates records.
Setting Up a Webhook Trigger
- Create a new automation (or edit an existing one)
- Select Webhook as the trigger type
- The system generates a unique webhook URL like:
https://app.donotname.com/api/automation/webhook/<unique-id> - Copy this URL and configure it in your external service
- Send a test request to map the incoming payload fields
Mapping Payload Fields
After receiving a test payload, Donotname shows the parsed JSON structure. You can reference any field from the payload in your automation actions using dot notation:
{{payload.name}}— top-level field{{payload.data.email}}— nested field{{payload.items[0].title}}— array access
Multi-Table Webhooks
A single webhook can write to multiple tables using branching logic. For example, an incoming CRM webhook might contain both contact and company data:
Trigger: Webhook received
└─ Router:
├─ If payload.type = "contact"
│ └─ Create Record in "Contacts" table
└─ If payload.type = "company"
└─ Create Record in "Companies" table
You can also create records in multiple tables from a single payload without branching — just add multiple Create Record actions that each map different fields from the payload.
Deduplication
To avoid creating duplicate records when the same webhook fires multiple times (retries, duplicate events), use the dedup strategy:
- In the Create Record action, enable "Check for existing record"
- Choose a field to match on (e.g.,
external_id,email) - Select the behavior for duplicates:
- Skip — do nothing if a matching record exists
- Update — update the existing record with the new data
- Always create — create a new record regardless (default)
Idempotency
Many external services send a unique event ID with each webhook. Store this in a field and use it for dedup to ensure each event is processed exactly once, even if the webhook fires multiple times.
Email-to-Webhook via Cloudflare
You can turn incoming emails into webhook payloads using Cloudflare Email Workers. This is useful for processing inbound emails (e.g., form submissions, notifications) as structured data.
Setup Steps
- Configure Cloudflare Email Routing for your domain
- Create a Cloudflare Worker that receives the email and forwards it as a webhook:
export default {
async email(message, env) {
const { from, to } = message;
const subject = message.headers.get('subject') || '';
// Read the email body
const rawBody = await new Response(message.raw).text();
// Forward to your Donotname webhook
await fetch(env.WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
from,
to,
subject,
body: rawBody,
received_at: new Date().toISOString(),
}),
});
},
};
- Set the
WEBHOOK_URLenvironment variable in the Cloudflare Worker to your Donotname webhook URL - Route emails to the Worker: in Cloudflare dashboard, go to Email > Routing > Routes, and route the desired address (e.g.,
intake@yourdomain.com) to your Worker
Use Cases for Email-to-Webhook
- Lead capture: Forward form notification emails to create records in a Leads table
- Support tickets: Parse incoming support emails into a Tickets table
- Invoice processing: Extract data from invoice notification emails
- Notification aggregation: Collect alerts from multiple services into a single table
Webhook Security
- Each webhook URL contains a unique, unguessable token
- For additional security, you can verify the request by checking headers (e.g.,
X-Webhook-Secret) using a Router condition - Webhook URLs can be regenerated if compromised — this invalidates the old URL immediately
- All webhook payloads are logged in the automation run history
Testing Webhooks
Use tools like curl, Postman, or Insomnia to send test requests:
curl -X POST https://app.donotname.com/api/automation/webhook/<your-id> \
-H "Content-Type: application/json" \
-d '{"name": "Test Contact", "email": "test@example.com", "source": "manual"}'
Check the automation's Run History to verify the payload was received and processed correctly.