Event Leads
Capture leads at trade shows, conferences, and events with a printable QR poster and a mobile-friendly form
Overview
Event Leads gives you a single page-sized poster (A6–A3 or US Letter) with your branding and a QR code. Visitors scan the QR with their phone, fill out a short form, and the lead lands in your EziLinks dashboard with their country detected automatically. No app, no booth scanner — just a printed poster.
Typical uses: trade shows, conferences, networking events, in-store sign-ups, retail counters, pop-up shops.
What's Included by Plan
| Plan | Event forms | Leads per form | Custom domain |
|---|---|---|---|
| Free | 1 | 50 | — |
| Digital Card | — | — | — |
| Pro Toolkit | 5 | Unlimited | With Pro Domain add-on |
| Agency | Unlimited | Unlimited | Up to 5 included |
Creating an Event Form
1 Open Event Leads in the sidebar
From the dashboard, click Event Leads in the left sidebar. You'll see your existing forms (if any) listed as a table with the public URL, page size, and lead count.
2 Click "New event form"
A new draft form is created and the editor opens. Give it an internal name like Trade Show June 2026 — visitors never see this name, it's just for you to find later.
3 Choose your page size
Pick the size you'll print at: A6 / A5 / A4 / A3 or US Letter. The canvas preview on the right updates as you change this.
4 Brand the poster
Pick a brand colour — this fills the poster background as a solid colour. Optionally select a company logo from the dropdown (uploaded in Settings › Logos). The logo sits above the QR.
You can also upload a background image instead of the solid brand colour fill — useful for photo-heavy designs.
5 Customise the QR
Adjust QR colour, add a small centre logo (e.g. your company mark), resize between 15% and 70% of the page, and drag the QR around the preview to reposition it.
6 Choose which fields to capture
Toggle on/off any of: Name, Email, Phone, Company, Job Title, Notes. Edit the labels (e.g. change "Name" to "Full name") and mark fields as required. Name and Email are required by default.
7 Save changes
Hit Save changes at the bottom. You're returned to the form list with your new form ready to use.
Choosing the Public URL
By default, every form lives at a short URL on ezl.me/lead/<slug>. The slug is a random 6-character code (e.g. ezl.me/lead/7f8940) chosen for you so it fits comfortably on a poster.
Using a custom domain
If you have a verified custom domain (Pro Domain add-on or Agency plan), a Domain dropdown appears in the editor. Pick one of your domains and the form is published at yourdomain.com/lead/<slug> instead.
When using a custom domain, you can also edit the slug to something memorable like signup or june2026. The slug field shows "Available" or "Already in use" as you type, and the ↻ button generates a new random one if you'd rather not type.
Domain dropdown + slug picker. Type a custom slug or click the ↻ button to generate a random one. The green tick confirms it's available; red text appears immediately if the slug is taken.
admin, login, settings) and can't be used.
Customising the Public Form Page
The form page (what visitors see when they scan the QR) inherits your brand colour and logo automatically. A few extras you can tweak from the editor:
- Header text — shown above the form fields (e.g. "Win our prize!")
- Footer text — shown under the QR on the poster (e.g. "Scan to connect with us")
- Success message — shown after a visitor submits the form
- Show logo on form page — tick to render the company logo next to the form title; untick for a text-only header
- Submit button colour — defaults to your brand colour, but you can pick a contrasting CTA shade
Sharing the QR Code
From the form's expand row in the list view (or from the editor toolbar), use:
- Download poster (PNG) — high-resolution PNG at print DPI, ready to send to a printer or paste into a design tool
- Print — opens your browser's print dialog directly with the poster set to the right page size (no popup tab)
- Open in new tab — opens the public form so you can see what visitors will see
Viewing and Exporting Leads
Each form's lead count is shown as a green badge in the list view. Click the form row's expand chevron to reveal action buttons:
- View leads — opens a modal with the captured leads in a table. Each row shows the submission time, the data the visitor entered, and the country (auto-detected from their IP).
- Download CSV — exports every lead from that form as a CSV file with a date-stamped filename, ready to open in Excel/Sheets or import into your CRM.
Phone numbers are stored in international format (e.g. +64 21 123 4567) so they're ready to dial regardless of where you're calling from.
The Leads captured modal. Country is auto-detected from each visitor's IP (no extra field needed in the form). Click Download CSV at the bottom to export everything for your CRM.
Email Notifications
Set the "Email me on every lead" field in the editor to get an instant email whenever someone submits. Leave it blank to disable — you can always download the CSV later.
Repeat submissions from the same email address within 5 minutes are deduplicated (one notification per visitor per 5-minute window) to stop spam if someone double-taps the submit button.
Send Leads to Your Tools (Webhooks)
Every form has an outbound webhook you can point at any automation platform — Zapier, Make, n8n, Pipedream, Pabbly, native CRM webhook receivers (HubSpot, Salesforce, Mailchimp, ActiveCampaign, Pipedrive), or a custom endpoint you control. As soon as a lead is captured, EziLinks POSTs the data to your URL as JSON.
Setting it up
- In the form editor, paste a webhook URL from your automation platform into Webhook URL and save the form.
- A signing secret is auto-generated on first save. Copy it (Copy button) and paste it into your automation platform if it supports HMAC verification (optional but recommended).
- Click Send test payload to confirm your automation receives data correctly. The result (success or error) shows inline.
- Click View recent deliveries to see the last 20 webhook attempts (real leads + test sends) with status codes and response times.
Payload shape
EziLinks POSTs this JSON to your webhook URL for every new lead:
{
"event": "lead.created",
"form": {
"id": 6,
"slug": "trade-show-june-2026",
"name": "Trade Show June 2026"
},
"lead": {
"id": 42,
"submitted_at": "2026-06-08T12:34:56.789Z",
"country": "Australia",
"country_code": "AU",
"data": {
"name": "Jane Smith",
"email": "jane@example.com",
"phone": "+61 412 345 678",
"company": "Acme Pty Ltd",
"title": "Marketing Director",
"notes": ""
}
}
}
Headers EziLinks sends
Content-Type: application/jsonUser-Agent: EziLinks-Webhook/1.0X-Webhook-Signature: sha256=<hex>— HMAC-SHA256 of the raw body using your form's secretX-Webhook-Timestamp: <iso8601>— for optional replay-attack protection
Signature verification (recommended)
Receivers should verify the X-Webhook-Signature header before trusting the payload. Recompute the HMAC of the raw request body using your saved secret, then compare:
Node.js
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', SECRET)
.update(rawBody, 'utf8')
.digest('hex');
const ok = crypto.timingSafeEqual(
Buffer.from(req.headers['x-webhook-signature']),
Buffer.from(expected)
);
PHP
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
$ok = hash_equals($_SERVER['HTTP_X_WEBHOOK_SIGNATURE'], $expected);
Python
import hmac, hashlib
expected = 'sha256=' + hmac.new(
secret.encode(), raw_body, hashlib.sha256
).hexdigest()
ok = hmac.compare_digest(
request.headers['X-Webhook-Signature'], expected
)
Delivery + retries
- EziLinks attempts delivery synchronously when a lead is captured. The visitor's submit response is never blocked by webhook delivery.
- If your endpoint responds with 2xx, the delivery is marked successful.
- If your endpoint responds with 4xx (other than 408/429), EziLinks gives up — it assumes your endpoint has rejected the payload and a retry won't help.
- If your endpoint responds with 5xx, times out, or is unreachable, EziLinks retries up to 2 more times with backoff (5s, then 30s, then 2min).
- Endpoints should respond within 8 seconds — anything slower is treated as a timeout.
- Leads are always saved to the EziLinks database first, so a failed webhook never loses data — you can always download the CSV later.
Common platform setup
- Zapier: Create a Zap → trigger "Webhooks by Zapier" → "Catch Hook". Copy the catch hook URL into EziLinks. Then add an action step for your CRM (HubSpot, Mailchimp, etc.) and map the fields from
lead.data. - Make (Integromat): Add a "Webhooks" module → "Custom webhook" → Add. Copy the URL into EziLinks. Click "Send test payload" to populate the field mapping automatically.
- n8n: Add a "Webhook" trigger node, set HTTP method to POST, copy the generated URL into EziLinks.
- HubSpot: Use a Workflow with a "Custom Code" or "Webhook" action, or pipe through Zapier/Make to a HubSpot CRM action.
- Mailchimp / ActiveCampaign / Pipedrive: Best routed via Zapier or Make — their native webhook receivers expect their own internal formats, while a Zap/Scenario lets you map our flat JSON into their fields cleanly.
Anti-Spam Protection
Every form has two layers of protection built in:
- Honeypot field — an invisible field that real visitors don't see but bots will fill in. Bot submissions are silently dropped, so you never see them in your leads.
- Rate limiting — 10 submissions per hour per IP address. Generous enough that a busy event won't trip the limit, but enough to block scripted abuse.
Glossary (jargon translated)
If any of the terms in the webhook / anti-spam sections were unfamiliar, here's plain-English translations:
- Slug — the bit after the slash in your form's URL (e.g.
ezl.me/lead/my-event). You can pick your own or let us auto-generate one. - GeoIP — a database that maps an IP address to a country. We use it to automatically tag every lead with where they were when they submitted — no extra question for the visitor.
- Webhook — a URL we send lead data to as soon as a form is submitted. Used to pipe leads into Zapier, your CRM, etc.
- Payload — the JSON data we send to your webhook URL. Contains the lead's form answers + country + timestamp.
- HMAC — a cryptographic signature so the receiver of a webhook can verify it really came from EziLinks (not a fake request from someone else). Only matters if you're piping leads to a custom server you control.
- Rate limiting — a cap on how many form submissions one visitor (per IP address) can send in a given window. Blocks scripted spam.
- Honeypot — an invisible form field. Real visitors don't see it. Spam bots fill in every field, including the hidden one, which tells us they're a bot and we silently drop the submission.
Common Questions
How is the visitor's country detected?
EziLinks uses MaxMind's GeoIP database to look up the visitor's country from their IP address at submission time. The country (e.g. "New Zealand") is stored alongside the lead and shown in the leads view and the CSV. No third-party tracking, no JavaScript geolocation prompts.
Can the same visitor submit twice?
Yes — nothing stops a visitor submitting more than once. If you want one-per-person, ask for email and dedupe in your CRM/spreadsheet after export.
What happens if I delete a form?
The form is soft-deleted — it's hidden from your dashboard immediately and the public URL stops resolving. Existing leads stay in the database for your records. If you change your mind, contact support.
Can I edit a form after it's printed?
Yes — the poster image, fields, and branding can all be edited any time. However: if you change the slug or move the form to a different domain, the QR code on already-printed posters will no longer match. Lock in your URL before you go to print.
Can two team members view the leads?
On Agency, yes — team members with Viewer or Editor roles can see the team owner's event forms and leads. See Team Members for permissions.