Integrations & developer tools
Send every completed response to the tools your team already uses. Configure connectors in the builder's Settings → Integrations — each one fires on form completion, alongside the generic webhook and email notifications.
No-code connectors
Zapier
Trigger any of Zapier's 6,000+ apps from a form submission.
Create a Zap with the Webhooks → Catch Hook trigger and paste its URL into the form's Zapier field. EesyForm posts a shaped payload (event, form, response, answers) on every completion.
Zapier "Webhooks" → "Catch Hook" gives you a URL like
https://hooks.zapier.com/hooks/catch/12345/abcde
Paste it into the form's Zapier field and route the raw JSON to any of
Zapier's 6,000+ apps.Slack
Post a formatted message to any Slack channel on every response.
Create an incoming webhook in Slack (Incoming Webhooks app) and paste its URL into the form's Slack field. Answers are rendered as a Slack block message.
Google Sheets
Append a row per response — headers become your question titles.
Deploy the Apps Script below as a Web App and paste the /exec URL into the form's Google Sheets field. No API keys or OAuth required.
// Google Apps Script — paste into a new Apps Script project,
// deploy as a Web App (execute as you, anyone with the link),
// and paste the /exec URL into the form's Google Sheets field.
function doPost(e) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Responses")
|| SpreadsheetApp.getActiveSpreadsheet().insertSheet("Responses");
const data = JSON.parse(e.postData.contents);
if (!sheet.getRange(1, 1).getValue()) {
sheet.getRange(1, 1, 1, data.headers.length + 1)
.setValues([["Submitted at", ...data.headers]]);
}
const row = [data.submittedAt, ...data.values.map((v) => v ?? "")];
sheet.appendRow(row);
return ContentService.createTextOutput("ok");
}HubSpot
Create or update a contact in HubSpot CRM from the respondent's email.
Create a private app in HubSpot, copy its access token, and paste it into the form. Responses with an email answer create a contact.
Salesforce
Route responses into Salesforce as leads via your own webhook.
Point the form's Salesforce field at an endpoint you control (e.g. an Apex REST resource or an integration platform) — EesyForm posts a lead-shaped payload.
Mailchimp
Subscribe respondents to a Mailchimp audience.
Paste a Mailchimp API key and audience (list) ID. Respondents with an email answer are added as subscribed members.
Notion
Append a page to a Notion database per response.
Create an integration in Notion, share your database with it, and paste the token + database ID into the form. The first answer becomes the page title.
Airtable
Create a record in an Airtable base per response.
Create a personal access token in Airtable and paste it with your base ID and table name. Column names should match your question titles.
Custom integrations
Webhooks
Receive raw JSON on every completed response with HMAC verification.
Set a webhook URL in Settings → Notifications. EesyForm POSTs the payload with an X-EesyForm-Signature header; verify it using the shared WEBHOOK_SECRET and the form ID.
// Node.js — verify the X-EesyForm-Signature header on a webhook.
import { createHmac, timingSafeEqual } from "node:crypto";
export function verifySignature(formId, body, signature) {
const secret = process.env.WEBHOOK_SECRET + ":" + formId;
const expected = createHmac("sha256", secret).update(body).digest("hex");
const a = Buffer.from("sha256=" + expected);
const b = Buffer.from(signature);
return a.length === b.length && timingSafeEqual(a, b);
}REST API & SDK
Fetch the form schema and submit responses from any language or app.
The headless API is open (CORS enabled). The eesyform-embed npm package wraps it in a typed EesyFormClient.
curl -X POST https://YOUR-EESYFORM-HOST.com/api/public/forms/my-form-abc123/responses \
-H "Content-Type: application/json" \
-d '{
"sessionId": "abc-123",
"fields": [
{ "field": { "id": "q_email", "type": "email" }, "text": "ada@example.com" }
]
}'isTest flag so you can filter them.