Capture Django CMS form submissions in Google Sheets
Add the LeadToSheet snippet to your Django CMS base template to sync djangocms-forms, aldryn-forms, and custom plugin submissions into Google Sheets — including across django.contrib.sites multi-site setups.
Platform category: Content Management System
Why teams use LeadToSheet for Django CMS
Django CMS pages are assembled from plugins and placeholders, which means form markup can come from many sources. LeadToSheet listens at the document level so it captures submissions from djangocms-forms, aldryn-forms, custom CMSPlugin form blocks, and forms in static placeholders without per-plugin configuration.
Plugin-agnostic capture
Works with djangocms-forms, aldryn-forms, and any custom CMSPlugin that emits a <form> element. No plugin-specific wiring.
Placeholder-aware
Whether the form lives in a static placeholder, a child template, or a CMSPlugin, the snippet captures it the same way.
Multi-site friendly
Django CMS multi-site projects use one codebase per Site object — LeadToSheet attaches the hostname to every row so you can filter or route by site.
Choose your integration path
Set up Django CMS
Three ways to get submissions into your Google Sheet - pick the one that fits your stack. Every path delivers to the same sheet with the same fields.
Drop one script tag into your Django CMS site. Best for marketing pages and CMS templates that already share a header or layout.
- 1
Add the snippet to base.html
Drop the script tag into your project's shared base.html so every CMS page inherits it without per-template changes.
Tip: If you use TEMPLATES_DIR with overrides, add it to the topmost template only.
base.html embed
<script async src="https://www.leadtosheet.com/api/sdk?k=YOUR_CLIENT_KEY"></script> - 2
Test a plugin-rendered form
Place a djangocms-forms or aldryn-forms block on a page, submit a test entry, and confirm the Sheet row matches your fields.
Tip: For custom CMSPlugin form blocks, ensure the rendered template emits a real <form> element rather than handling the submit via fetch only.
- 3
Split by site (multi-site only)
Configure routing rules in the LeadToSheet dashboard to send each Django CMS Site's submissions to its own Sheet tab.
Tip: Use the hostname column LeadToSheet attaches automatically — no SITE_ID context processor needed.
Education and course enquiries
Capture course inquiry forms from Django CMS-built education sites into a Sheet shared with admissions and enrolment teams.
News and editorial tips
Collect reader tips and story submissions across Django CMS publications with full attribution attached.
Multi-brand contact routing
Route inquiry forms from each Site in a Django CMS multi-site setup to its own Sheet tab automatically.
Frequently asked questions
- Does it work with djangocms-forms and aldryn-forms?
- Yes. LeadToSheet captures whatever <form> element each plugin renders, without plugin-specific configuration. Both production plugins work out of the box.
- How does this interact with django.contrib.sites?
- The snippet attaches the current request hostname to every submission. Use that hostname in a Sheet filter or LeadToSheet routing rule to separate submissions per Site object — no SITE_ID context processor needed.
- Can I capture forms inside CMSPlugin blocks?
- Yes — including custom plugins. The snippet doesn't care which plugin renders the form, only that a <form> element exists in the DOM.
Considering other options for Django CMS?
See how LeadToSheet compares to Formspree, Zapier, Typeform, HubSpot, and other form capture tools.
