How voting restrictions and limits work
A voting restriction sets how a voter is recognized (Anonymous Fingerprint or Email Login) and how many votes they get per entry, category or list, optionally per time interval. Per-day limits follow the campaign's time zone. Email Login needs the Max plan and reCAPTCHA needs Scale or higher.
Restrictions are set in the Entry Display Widget: open its settings, click the Voting tab and check Enable Voting Restrictions. Every piece of blue text in that section can be clicked and changed. For the rest of the setup, see How to set up voting.
How each restriction recognizes a voter
| Restrict votes by | How it tells voters apart | Plan |
|---|---|---|
| No restrictions | It doesn't | Launch and higher |
| Anonymous Fingerprint | Anonymized browser and IP data | Launch and higher |
| Email address (Email Login) | A verified email address | Max |
Google reCAPTCHA (Scale plan and higher) adds a bot check to each vote on top of any restriction. It needs your own reCAPTCHA keys, set in Campaign Settings → Security. No restriction stops every bad actor; for more layers, see Bot and fraud prevention tools.
Choose what the limit counts
Each limit has a number of votes and a scope:
- Per entry: the voter gets that many votes on every entry. "3 votes per entry" means 3 on each one.
- Per category: that many votes in each category.
- Per list: that many votes in total, across every entry in the list.
Click add interval to make the limit repeat, for example every 4 hours or every 1 day, in days, hours, minutes or seconds. Without an interval, the limit lasts for the whole contest.
A day and 24 hours are different settings:
- Every 1 day follows the calendar. Once the date changes in the campaign's time zone, it's a new day for voting, however recently the voter last voted.
- Every 24 hours is a rolling window. Someone who votes at 9:30 AM Pacific on Tuesday can vote again from 9:30 AM Pacific on Wednesday.
With a per-entry or per-category limit, you can also set a maximum votes per user: a cap on the voter's total across the whole list connected to the widget, on top of the per-entry limit. This limit never resets. When a voter casts their final allowed vote, the A user casts their final vote (Maximum votes per user) Action Widget trigger fires, if you've set one up.
How limits combine: a worked example
Say your contest has 20 entries. Here is what one voter can do under each setup:
| Setup | What the voter can do |
|---|---|
| 1 vote per entry, no interval | Vote once on each entry for the whole contest: up to 20 votes |
| 1 vote per entry, every 1 day | Vote once on each entry each calendar day: up to 20 votes a day, with a new allowance when the date changes in the campaign's time zone |
| 1 vote per entry, every 24 hours | Vote once on each entry, then again on that entry 24 hours after the last vote on it |
| 10 votes per list, every 1 day | Cast 10 votes a day in total, on any entries, even all 10 on one entry |
| 1 vote per entry, maximum 5 votes per user | Vote once each on up to 5 entries, for the whole contest |
| 10 votes per entry every 1 day, maximum 30 votes per user | Up to 10 votes a day on every entry, until 30 in total, then none for the rest of the contest |
The last setup is a common mistake. If you want 10 votes per person per day, use the third row: 10 votes per list with a 1-day interval, and don't add a per-entry limit. Combining a per-entry limit with a maximum gives voters more than 10 votes on the first day, and the maximum doesn't reset, so they can run out before the contest ends.
When a voter goes over a limit, they see the restriction's error message, such as "You already voted". You can change that text in the Voting Restrictions section. To show something extra once a voter has used their last vote, such as "Come back tomorrow", see Setting up an end-of-voting action.
Days follow the campaign's time zone
Voting dates and daily limits use the campaign's time zone, not the voter's. It is set in Campaign Settings → General and shown in the widget's Voting section.
For example, if the campaign is set to US Central Time and your voters are in the UK, the voting window and each day's allowance start at midnight Central Time, which is 6:00 AM in the UK. Set the campaign time zone to where most of your voters are.
Email Login limits
- Voters enter their email address, receive a 6-digit code, and type it into the campaign. Codes expire after 15 minutes and work only once.
- Since September 21, 2026, voters re-verify every 30 days by default, including on live campaigns, and you can choose any longer interval. Always verify, or anything shorter than 30 days, needs your own SendGrid account connected to ShortStack. The builder warns you if a choice isn't allowed.
- Email Login doesn't collect addresses, and they can't be exported. To collect voter details, use a form before voting.
Changing settings during a contest
- Time zone: moves the voting start and end times and the point where each day's allowance resets.
- Limits: votes already cast count toward the new limit. Raise a limit from 10 to 30 and someone who has already voted 10 times can vote 20 more. Lower a limit below what a voter has already used and they can't vote again.
- Voting round: a widget shows the totals for the round it is set to. Switch a widget from Round 2 to Round 1 and the counts change, which looks like votes were lost. Switch it back to Round 2 and that round's votes reappear.
Multi-round and recurring contests
- Up to three rounds. Use one Entry Display Widget per round. Each later round filters by the previous round's votes to show only the top entries. Votes are counted separately for each round. See Multi-round voting.
- Monthly or recurring contests. Duplicate the form and the Entry Display Widget for each period, give each form a new list, and use Visibility to show each pair only during its month.
- Don't reuse a list across contests. Votes belong to the entries in a list, so a list connected to several campaigns adds their votes together. To carry entries into a new contest, use Copy entries to new list in the Entries Manager, which can reset vote counts.
Reviewing and exporting votes
- Totals: the Entries Manager shows each entry's votes at the top left of its tile, can sort by most votes and filter by each round's votes. An entries export includes a votes column, which also counts any extra points.
- Each vote: open an entry's Entry Details and click the vote count to see each vote's date and time, vote ID and anonymized IP. This detail is only recorded when voting restrictions are on. See Voting history.
- Signs of bot voting: many votes within the same minute, bursts at odd hours such as 2:00 AM, or one or two entries with several times the votes of the next. Bots sometimes vote for an entry without the entrant's knowledge, and votes from one network share an anonymized IP, so treat these as signs rather than proof.
- Removing votes: add a New Adjustment with a negative number. Adjustments can't be edited or deleted, but you can add another to reverse one. Reset Votes in the Entries Manager sets a round's votes to 0 for every selected entry.
- Charts: the Analytics Votes tab (Max plan) shows votes by day and by round.
FAQs
Which voting restriction is the most secure?
Email Login, on the Max plan. Each voter has to confirm an email address with a one-time code before their vote counts. Anonymous Fingerprint needs no sign-in.
Can I see who voted for an entry?
Not by name or email address. For each vote you can see the date and time, a vote ID and an anonymized IP address with the last block removed. Email Login addresses are used only for verification and can't be exported.
Can I limit votes per category?
Yes. Set the limit's scope to category in the Voting Restrictions section, and each voter gets that many votes in each category.
Related resources
Was this helpful?
Thanks — that helps us decide what to fix next.
Sorry this missed. Tell us what you needed and we'll get you an answer — and fix the page.