Ask your readers.
Grow your list.
OpenPoll pins a one-question poll to any WordPress post. Readers vote with their email address — AI writes the question, a layered anti-spam stack keeps the list clean, and every address stays in your database.
Vote in, results out
The form swaps to a live results chart the moment a reader votes — and the address they voted with lands on your list.
The actual front-end widget — restyleable with a single CSS file drop-in.
Three steps to a growing list
Ask — or let AI ask
Type a question in the Poll meta box, or let Claude / ChatGPT write the question and answers from the post itself — automatically on schedule, or with one click.
Readers vote with their email
One question, one tap, one email field. The anti-spam stack quietly rejects disposable domains, role addresses, obvious fakes, and bots.
Export and act
Every vote lands in your admin — sortable, filterable by poll or date, and exportable as CSV with the answer each reader chose.
Built for publishers
Battle-tested on news sites serving millions of pageviews a month.
One-question polls
A single focused question per post — placed with the [postpoll] shortcode or auto-appended after the article.
Email capture
Votes require an email. Records keep the answer, post, IP, and timestamp — and belong to you, not a polling service.
AI-written questions
Bring your own Anthropic or OpenAI key. Questions generate automatically when posts reach the statuses you pick, or on demand in the editor.
Layered anti-spam
Disposable-domain blocklist, role-address filtering, typo suggestions, honeypot, minimum fill-time, and optional reCAPTCHA v2.
Live results chart
Animated percentage bars the instant a vote lands, with cookie-based re-vote prevention and a "just show me the results" opt-out.
CSV export
Six columns — email, date, IP, post, URL, answer — respecting whatever poll or date filters you have active.
All Polls dashboard
Every poll's votes at a glance, a sortable Polls column on your post list, and Today / Week / Month views of incoming emails.
Author exclusions
Keep polls — and AI spend — off posts by specific authors, like sponsored-content or promoted-post accounts.
Privacy-ready
WordPress personal-data exporter and eraser integration, bulk delete for GDPR requests, and a returning-voter pre-fill that lives only in the reader's own browser.
Changelog
Current version: v2.6.64
- New Recount from submissions tool (Settings): restores votes that were dropped by the old concurrency bug, rebuilt from your collected email records. It only ever adds back votes it can prove happened, never removes any, and (like the cleanup tool) has a read-only preview before a locked apply. Run it once after updating to recover historically under-counted polls.
- Fixed the core cause of polls losing votes: when several readers voted at nearly the same moment, their votes could overwrite each other. The vote tally is now serialized with a database-level lock that works on every host, so simultaneous votes are all counted (previously this was only safe on sites running a persistent object cache like Redis). This is the real fix behind the "editing a post loses votes" reports.
- Fixed a bug where editing a post that contains a poll — or editing the poll — could make the poll lose votes, especially on busy polls. Saving a post no longer rewrites the vote tallies unless you actually changed the answers, and when you do change them the counts are updated under the same lock the voting uses, so votes cast while you're editing are never dropped.
- The admin menu is now labeled OpenPoll with a branded bar-chart icon (was "Poll Emails" with an envelope).
- Refreshed the Settings screen into a two-column layout with At a glance and Support & feedback side panels, matching the Orchard Grove Media house style.
- Minor styling tweaks to the poll footer links: the "Hide all polls" button and the "just show me the results" link no longer show an underline, and the button text is a touch bolder and cleaner.
- Hardened the new CAPTCHA support: if the challenge script is blocked (e.g. by an ad blocker) or fails to load, the voter now sees a clear "couldn't load — allow it or try another browser" message instead of being stuck; the widget is rendered explicitly to avoid a rare double-render that could block a solved challenge; and Settings warns if a provider is selected without its full key pair.
Older releases (20)
- New: choose your spam-protection challenge under Settings → Spam protection — Google reCAPTCHA v2 or Cloudflare Turnstile. Turnstile is privacy-friendly and far less likely to be blocked by ad blockers, which can leave reCAPTCHA users unable to vote. Existing reCAPTCHA setups keep working with no change. The challenge now also resets after a failed submit so a second attempt works.
- New data-retention / database-size controls paired with the incremental export. Already-exported addresses are now remembered as one-way hashes in a compact dedicated table (never the plaintext), so old vote records can be auto-deleted to keep the database small without ever causing an address to be re-exported or re-cleaned. Set a retention window in days on the Settings page (0 = keep forever, the default). The daily auto-purge only ever deletes records you have already exported — nothing uncleaned is lost — and it never touches your poll results or vote counts.
- New Incremental email export (Settings): download only the addresses collected since your last export, deduplicated to one full row per address (its most recent vote, with IP and signup time). Lets you feed only genuinely new addresses to a list-cleaning service instead of re-cleaning ones you already paid to clean. A single editable cutoff date tracks progress and advances automatically on each download; the previous cutoff is kept so a batch can be re-pulled.
- Fixed the All Polls admin page timing out to a blank screen on sites with many polls. It previously ran one database count query per poll (plus loaded every poll individually) before paginating; it now uses two batched queries total, regardless of how many polls exist. Lowering "Polls per page" was never the fix — the heavy work ran across every poll before the list was paginated.
- Verified compatible with WordPress 7.1 (front-end voting flow, admin Polls column, and Settings all smoke-tested on a live 7.1 site). "Tested up to" bumped accordingly.
- Big admin speed-up on the Posts list: the "Polls" column now renders with zero extra database queries (it previously ran one count query per row), and unchecking "Polls" in Screen Options now skips all poll work entirely.
- The "Hide all polls" link is now styled as a small button, making the reader opt-out easier to spot without competing with the poll itself.
- Your vote now stays remembered for a year — previously the "already voted" marker only lasted until the browser closed, so returning readers saw the vote form again as if their vote had vanished.
- The results chart now badges the answer you chose with a "Your vote" marker.
- Friendlier email validation: real names that merely contain a rude-looking fragment (Dickson, Cockburn, Slutsky...), small-business addresses like [email protected], single-letter addresses, and personal domains like [email protected] are all accepted now. Junk like [email protected], aaaa@, and disposable domains is still rejected.
- New reader opt-out: a small "Hide all polls" link under every poll (in both the question and results views). One click — with a confirmation — hides polls in that reader's browser from then on. Clearing cookies brings them back.
- Renamed to OpenPoll (formerly Post Poll) with a new home at openpoll.dev.
- Now free and open source under the GPL-2.0 license.
- No functional changes — the update installs seamlessly over any 2.6.x version.
- Author exclusions now also skip AI generation, so no API call is spent on a poll that would never display.
- All AI-generated poll text is now forced to plain ASCII punctuation — straight quotes and apostrophes,
--for em dashes,...for ellipses.
- New setting: Hide polls from these authors — posts by listed user IDs never display a poll.
- New Poll data cleanup tool in Settings: a dry-run preview plus one-click repair for older polls stored with Unicode-escape punctuation artifacts, merging any split vote counts without losing a vote.
- Fixed "Invalid answer." rejections on answers containing typographic punctuation.
- The email field now pre-fills for returning voters (remembered in their own browser) and supports native browser autofill.
- Questions and answers stored with Unicode-escape artifacts now display clean punctuation everywhere on the front end.
- Refreshed admin design: branded header on the Settings and All Polls screens.
- AI generation now normalizes punctuation at generation time, so new polls store clean text.
- Public changelog begins here, 39 releases into the 2.6.x line: one-question polls, email capture with layered anti-spam, CSV export, AI question generation, All Polls dashboard, and privacy tooling.
Built by Orchard Grove Media
OpenPoll comes from Orchard Grove Media, the studio of Ted Slater. It was built for — and runs in production on — high-traffic news publishers, where every article is a chance to hear from readers and every reader is worth keeping.
It shares a philosophy with its siblings Heirloom SEO and WP AuthorPay: do the essential thing well, keep your data yours, and stay out of the way.
Good to know
Is it really free?
Where do the emails go?
Do I need an AI subscription?
Will it slow my site down?
How does it fight fake emails?
admin@, noreply@…), common-typo suggestions, obvious-fake rejection, a honeypot field, a minimum fill-time check, and optional Google reCAPTCHA v2.Why does it install into post-poll/?
wordpress-seo folder for 15 years for the same reason.)Can I restyle the poll?
postpoll/postpoll.css into your theme to replace the default styles wholesale, or use the template filters (post_poll_question, post_poll_answers, and friends) for finer control.Can readers opt out of seeing polls?
Questions or feedback?
Whether you're trying OpenPoll out, hit a snag, or have an idea — I'd genuinely like to hear it.
Every article is a question.
Start asking.
Free and open source. Installed in minutes. Your readers — and your list — will thank you.