splitforms.com
MARKETING · CONTACT FORM TEMPLATE

Lead Magnet Download Form (Ebook / PDF / Checklist Gate)

Ungated content gets read; gated content builds your list. The lead-magnet form trades the PDF for an email plus 1-2 qualifying questions, so the nurture sequence segments by intent.

1,000/mo free·no card·works on any host
form.htmlhtml30 lines
01<form action="https://splitforms.com/api/submit" method="POST">
02 <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
03 <input type="hidden" name="subject" value="New lead magnet download">
04
05 <label for="name">First name *</label>
06 <input id="name" type="text" name="name" placeholder="Jane" required>
07 <label for="email">Work email *</label>
08 <input id="email" type="email" name="email" placeholder="jane@company.com" required>
09 <label for="company">Company</label>
10 <input id="company" type="text" name="company" placeholder="Acme Inc">
11 <label for="role">What's your role?</label>
12 <select id="role" name="role">
13 <option value="">Choose…</option>
14 <option>Founder / CEO</option>
15 <option>Engineer</option>
16 <option>Designer</option>
17 <option>Marketer</option>
18 <option>Product manager</option>
19 <option>Other</option>
20 </select>
21
22 <!-- honeypot — bots fill every field -->
23 <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
24
25 <button type="submit">Send</button>
26</form>
27
28<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
29 Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
30</p>
1,000
submissions / mo, free
4
fields, ready to ship
5
code outputs
60s
from copy to inbox
Lead Magnet Download Form (Ebook / PDF / Checklist Gate) — example splitforms template with submissions inbox
§ 01Why it mattersthe qualifying-fields argument

Lead magnets — ebooks, checklists, templates, swipe files, mini-courses — are the workhorse of B2B content marketing. Gated downloads convert at 25-50% of landing-page visitors (vs 1-2% for newsletter signups), but only when the magnet is truly valuable. The form captures email plus 1-2 qualifying questions ('what's your role?', 'what's your team size?') so the nurture sequence segments by intent. Multi-step boosts completion vs a single form. After submit, the user is redirected to the PDF or it's emailed via webhook + auto-responder. Push the email to your ESP segmented by lead-magnet topic — that's how content marketers build audience taxonomies that actually convert downstream.

Multi-step (Typeform-style) · webhooks into ConvertKit / HubSpot / Mailchimp.
✦ at a glance
  • Lead magnet / download · 4 fields
  • HTML, JS, React, PHP, cURL outputs
  • One POST endpoint, no SDK
  • Honeypot + classifier, no CAPTCHA
§ 02Live previewinteractive · sandboxed · no key required

See exactly what your visitors see — and you’ll receive.

Left: the rendered form, fully interactive in a sandboxed iframe. Right: the email and dashboard view that lands the moment a visitor submits.

preview · lead-magnet-download-formlocalhost:3000
✦ what you’ll see in your inbox

Every submission becomes an email plus a dashboard row. The fields below are the exact payload your form will send. Reply-to is wired to the visitor’s email so hitting reply goes back to them.

dashboard · new submission14ms · 200 OK
SUBJECT · New lead magnet download
First name
Maya Iyer
Work email
maya@studio71.co
Company
Studio 71
What's your role?
Founder / CEO

Iframe is sandboxed — submit doesn’t actually fire. Get your access key to wire it up live.

§ 03Three steps3 steps · ~60 seconds

Generate, embed, receive.

Three actions stand between you and your first lead. None of them require a backend, a database, or a CAPTCHA library.

STEP 01GENERATE

Step 1: capture email

Single email field — frictionless step 1. Once the email is in, momentum carries through later qualifying questions.

Create your form
key=sk_live_••••••••
STEP 02EMBED

Step 2-3: qualify role / team

One or two questions on role and team size. Optional but most users complete because they're invested. Each answer becomes a tag in the ESP for downstream segmentation.

snippethtml
<form action="https://splitforms.com/api/submit" method="POST">
  …
</form>
STEP 03RECEIVE

Deliver the magnet

Auto-respond with the PDF link (or redirect to a thank-you page that auto-downloads). Webhook to ConvertKit / HubSpot / Mailchimp into a 'lead-magnet:[topic]' audience for the nurture sequence.

inbox · 1 newjust now
FROM contact@yoursite.com
New lead magnet download
Maya Iyer maya@studio71.co
Loved your last open house in Hayes — looking for similar with parking. Pre-approved through Wells Fargo.
§ 04Copy & ship5 languages · same endpoint

Five outputs. One backend.

HTML by default. Click open the language you ship in — every variant POSTs to the same /api/submit endpoint.

01HTMLform.html30 lines
<form action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="hidden" name="subject" value="New lead magnet download">

  <label for="name">First name *</label>
  <input id="name" type="text" name="name" placeholder="Jane" required>
  <label for="email">Work email *</label>
  <input id="email" type="email" name="email" placeholder="jane@company.com" required>
  <label for="company">Company</label>
  <input id="company" type="text" name="company" placeholder="Acme Inc">
  <label for="role">What's your role?</label>
  <select id="role" name="role">
    <option value="">Choose…</option>
    <option>Founder / CEO</option>
    <option>Engineer</option>
    <option>Designer</option>
    <option>Marketer</option>
    <option>Product manager</option>
    <option>Other</option>
  </select>

  <!-- honeypot — bots fill every field -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">

  <button type="submit">Send</button>
</form>

<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
  Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
</p>
02JavaScriptform.js46 lines
<form id="lf-form">
  <label for="name">First name *</label>
  <input id="name" type="text" name="name" placeholder="Jane" required>
  <label for="email">Work email *</label>
  <input id="email" type="email" name="email" placeholder="jane@company.com" required>
  <label for="company">Company</label>
  <input id="company" type="text" name="company" placeholder="Acme Inc">
  <label for="role">What's your role?</label>
  <select id="role" name="role">
    <option value="">Choose…</option>
    <option>Founder / CEO</option>
    <option>Engineer</option>
    <option>Designer</option>
    <option>Marketer</option>
    <option>Product manager</option>
    <option>Other</option>
  </select>
  <button type="submit">Send</button>
</form>

<p style="margin-top:12px;font-size:11px;color:#888;text-align:right">
  Powered by <a href="https://splitforms.com" style="color:#888;text-decoration:none" target="_blank" rel="noopener">splitforms</a>
</p>

<script>
  document.getElementById('lf-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    const data = new FormData(e.target);
    data.set('access_key', 'YOUR_ACCESS_KEY');
    data.set('subject', 'New lead magnet download');

    const res = await fetch('https://splitforms.com/api/submit', {
      method: 'POST',
      body: data,
      headers: { Accept: 'application/json' },
    });

    const json = await res.json();
    if (json.success) {
      e.target.reset();
      alert('Sent!');
    } else {
      alert('Error: ' + (json.message || 'Try again'));
    }
  });
</script>
03React / Next.jsForm.tsx61 lines
'use client';

import { useState, type FormEvent } from 'react';

export default function LeadMagnetForm() {
  const [status, setStatus] = useState<'idle' | 'sending' | 'sent' | 'error'>('idle');

  async function onSubmit(e: FormEvent<HTMLFormElement>) {
    e.preventDefault();
    setStatus('sending');

    const data = new FormData(e.currentTarget);
    data.set('access_key', 'YOUR_ACCESS_KEY');
    data.set('subject', 'New lead magnet download');

    const res = await fetch('https://splitforms.com/api/submit', {
      method: 'POST',
      body: data,
      headers: { Accept: 'application/json' },
    });

    const json = await res.json();
    setStatus(json.success ? 'sent' : 'error');
    if (json.success) e.currentTarget.reset();
  }

  if (status === 'sent') return <p>Thanks — we&rsquo;ll be in touch.</p>;

  return (
    <>
    <form onSubmit={onSubmit}>
      <label htmlFor="name">First name *</label>
      <input id="name" type="text" name="name" placeholder="Jane" required />
      <label htmlFor="email">Work email *</label>
      <input id="email" type="email" name="email" placeholder="jane@company.com" required />
      <label htmlFor="company">Company</label>
      <input id="company" type="text" name="company" placeholder="Acme Inc" />
      <label htmlFor="role">What's your role?</label>
      <select id="role" name="role">
        <option value="">Choose…</option>
        <option>Founder / CEO</option>
        <option>Engineer</option>
        <option>Designer</option>
        <option>Marketer</option>
        <option>Product manager</option>
        <option>Other</option>
      </select>

      <button type="submit" disabled={status === 'sending'}>
        {status === 'sending' ? 'Sending…' : 'Send'}
      </button>

      {status === 'error' && <p>Something went wrong. Try again.</p>}
    </form>

      <p style={{ marginTop: 12, fontSize: 11, color: '#888', textAlign: 'right' }}>
        Powered by <a href="https://splitforms.com" target="_blank" rel="noopener" style={{ color: '#888', textDecoration: 'none' }}>splitforms</a>
      </p>
    </>
  );
}
04PHPsubmit.php28 lines
<?php
// Drop into a PHP page. Receives a form POST and proxies it to splitforms.com.
// Useful when you want to add server-side validation or rate limiting.

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $allowed = ['name', 'email', 'company', 'role'];
    $payload = ['access_key' => 'YOUR_ACCESS_KEY'];
    $payload['subject'] = 'New lead magnet download';

    foreach ($allowed as $f) {
        if (isset($_POST[$f])) $payload[$f] = $_POST[$f];
    }

    $ch = curl_init('https://splitforms.com/api/submit');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']);
    $response = curl_exec($ch);
    $status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    header('Content-Type: application/json');
    http_response_code($status);
    echo $response;
    exit;
}
?>
05cURLtest.sh8 lines
curl -X POST https://splitforms.com/api/submit \
  -H "Accept: application/json" \
  -d "access_key=YOUR_ACCESS_KEY" \
  -d "subject=New lead magnet download" \
  -d "name=Jane Builder" \
  -d "email=jane@example.com" \
  -d "company=Jane Builder" \
  -d "role=Founder / CEO" 

Replace YOUR_ACCESS_KEY with the key from your dashboard. That’s the only edit.

§ 06FAQ4 answered

Things people ask before they ship.

Direct answers, no marketing fluff. Missing one? Email hello@splitforms.com.

01Should I redirect to the PDF or email it?
Email it. Redirects to a Drive / S3 link mean the user gets the PDF without confirming the email — and the email might be a typo or a temporary address. Email delivery confirms the address by requiring an open. Add a 'didn't get it?' resend button on the thank-you page for the rare typo case.
02Can I integrate with ConvertKit / HubSpot / Mailchimp?
Yes — webhook the JSON into the ESP. ConvertKit's 'tags' map naturally to lead-magnet topics; HubSpot's 'lists' do the same. The nurture sequence triggers on tag-add and the topic-specific drip starts immediately. Most B2B teams use this exact pattern.
03Is gating content GDPR-safe?
If you have EU visitors, the consent for marketing email needs to be explicit and unbundled — meaning a separate checkbox 'I want to receive emails about [topic]' that's not pre-checked and not bundled with 'I accept the download'. Bundled consent has been challenged in EU rulings; unbundled is the safe play.
04How long should the lead magnet be?
A 5-10 page PDF outperforms a 50-page ebook for most B2B audiences — the user actually reads it. Templates, checklists, and swipe files (1-3 pages) convert highest of all because they're immediately usable. The size of the magnet matters less than the time-to-value the moment they open it.
✻ ✻ ✻

Ship your lead magnet download form (ebook / pdf / checklist gate) in 60 seconds.

1,000 free submissions per month. No credit card. Copy the snippet, paste your access key, watch leads land in your inbox.

Get free access key →Browse all 60 templates →
v0.1 · founders pricing locked in · early access open