Skip to main content

Documentation Index

Fetch the complete documentation index at: https://doc.spike.ac/docs/llms.txt

Use this file to discover all available pages before exploring further.

Why Use Spike with Framer

Framer’s built-in form component is limited. Spike gives you:
  • Unlimited form submissions on the free plan
  • Spam protection (honeypot, reCAPTCHA, Turnstile)
  • Email notifications and auto-responders
  • Webhook integrations
  • 21+ integrations (Slack, Discord, Google Sheets, etc.)
  • Full API access to your submission data

Setup Steps

1

Create Spike Form

Create a new form in your Spike dashboard and copy the form slug.
2

Add Code Embed in Framer

In the Framer editor, add a Code component (from the Insert menu) where you want the form.
3

Paste Form HTML

Paste your Spike form HTML into the code component.
4

Publish

Publish your Framer site. The form is live.

Example Embed

Paste this into a Framer Code component:
<form action="https://api.spike.ac/f/YOUR_FORM_SLUG" method="POST" style="max-width:500px;font-family:Inter,sans-serif;">
  <input type="text" name="_gotcha" style="display:none">

  <div style="margin-bottom:16px;">
    <label style="display:block;font-size:14px;margin-bottom:4px;">Name</label>
    <input type="text" name="name" required
      style="width:100%;padding:10px;border:1px solid #ddd;border-radius:8px;font-size:14px;">
  </div>

  <div style="margin-bottom:16px;">
    <label style="display:block;font-size:14px;margin-bottom:4px;">Email</label>
    <input type="email" name="email" required
      style="width:100%;padding:10px;border:1px solid #ddd;border-radius:8px;font-size:14px;">
  </div>

  <div style="margin-bottom:16px;">
    <label style="display:block;font-size:14px;margin-bottom:4px;">Message</label>
    <textarea name="message" rows="4" required
      style="width:100%;padding:10px;border:1px solid #ddd;border-radius:8px;font-size:14px;resize:vertical;"></textarea>
  </div>

  <button type="submit"
    style="width:100%;padding:12px;background:#000;color:#fff;border:none;border-radius:8px;font-size:14px;cursor:pointer;">
    Send Message
  </button>
</form>

AJAX Submission (No Page Redirect)

For a smoother experience without leaving the page:
<form id="spike-form" style="max-width:500px;font-family:Inter,sans-serif;">
  <input type="text" name="_gotcha" style="display:none">

  <div style="margin-bottom:16px;">
    <label style="display:block;font-size:14px;margin-bottom:4px;">Email</label>
    <input type="email" name="email" required
      style="width:100%;padding:10px;border:1px solid #ddd;border-radius:8px;">
  </div>

  <div style="margin-bottom:16px;">
    <label style="display:block;font-size:14px;margin-bottom:4px;">Message</label>
    <textarea name="message" rows="4" required
      style="width:100%;padding:10px;border:1px solid #ddd;border-radius:8px;resize:vertical;"></textarea>
  </div>

  <button type="submit"
    style="width:100%;padding:12px;background:#000;color:#fff;border:none;border-radius:8px;cursor:pointer;">
    Send Message
  </button>
  <p id="form-status" style="margin-top:12px;font-size:14px;display:none;"></p>
</form>

<script>
  const form = document.getElementById('spike-form');
  const status = document.getElementById('form-status');

  form.addEventListener('submit', async (e) => {
    e.preventDefault();
    const data = new FormData(form);

    try {
      const res = await fetch('https://api.spike.ac/f/YOUR_FORM_SLUG', {
        method: 'POST',
        body: data,
        headers: { 'Accept': 'application/json' }
      });

      if (res.ok) {
        status.textContent = '✓ Message sent!';
        status.style.color = 'green';
        form.reset();
      } else {
        throw new Error();
      }
    } catch {
      status.textContent = 'Something went wrong. Try again.';
      status.style.color = 'red';
    }
    status.style.display = 'block';
  });
</script>
Use inline styles to match your Framer site’s design. Framer’s Code component doesn’t have access to your site’s CSS classes, so inline styles are the way to go.