Stop Form Spam Without Ruining Conversion Rates | Community
Skip to main content
BlaneMcMichen-1
Adobe Employee
Adobe Employee
April 7, 2026

Stop Form Spam Without Ruining Conversion Rates

  • April 7, 2026
  • 1 reply
  • 17 views

Form spam is one of those problems every Marketo user eventually runs into. Bots fill out forms with nonsense data, junk email addresses pollute your database, and sales teams lose trust in inbound leads. The challenge is that most anti‑spam solutions trade security for friction—CAPTCHAs, extra fields, or aggressive validation rules that hurt legitimate conversion rates. The good news is that you can stop a large percentage of form spam without adding visible friction by using logic inside Marketo Forms 2.0 itself.

One effective approach is to add lightweight screening criteria inside the Forms2 onSubmit function. This lets you evaluate a submission in real time before it’s officially accepted. You might check signals like suspicious email domains, mismatches between country and phone format, empty hidden fields that should contain values, or submissions that arrive faster than a human reasonably could. Instead of outright blocking these entries, you can quietly divert them into a secondary path—creating a two‑part submission process where questionable leads must take an extra step to prove they’re real.

For example, when a submission fails one or more screening checks, you can redirect the visitor to a short follow‑up step rather than sending them straight to your thank‑you page. That second step might be a confirmation page, an email verification click, or a secondary form with a slightly different layout. Real people rarely notice the extra step, while bots often fail it entirely. Meanwhile, clean submissions that pass your criteria continue through the normal flow with zero added friction.

A particularly convenient technique is to use the Marketo Unique Code as a lightweight matching key in this process. Because the Unique Code is generated automatically by Marketo and available at the form and page level, it’s easy to reuse without introducing custom tokens or external dependencies. You can pass the Unique Code along to the second step and validate that it matches what Marketo originally generated. Bots that repost forms, bypass JavaScript, or replay payloads often won’t preserve this value correctly, making it a surprisingly effective signal.

The real advantage of this approach is balance. You’re not relying on a single hard stop or a visible barrier that frustrates real users. Instead, you’re layering quiet intelligence into the submission process—letting good leads flow through while forcing bad ones to reveal themselves. Over time, this keeps your database cleaner, your reporting more trustworthy, and your conversion rates intact, all while staying fully native to Marketo Forms 2.0.

This is a simple approach with a little JavaScript and standard Marketo Forms API methods.  What techniques are you using?

    1 reply

    SanfordWhiteman
    Level 10
    April 7, 2026

    Not understanding the point about Marketo Unique Code.

     

    The first anonymous pageview in a session will not have {{lead.Marketo Unique Code}}After some time (not necessarily the next pageview as it happens in the background) you’ll have {{lead.Marketo Unique Code}} from a newly created anonymous lead.

     

    After someone fills out a form, if the email already exists in your Marketo db, the session will be merged and the {{lead.Marketo Unique Code}} will change to the “real” value; this can happen either before or after the follow-up page is rendered (there’s an intrinsic race condition).

     

    BlaneMcMichen-1
    Adobe Employee
    Adobe Employee
    April 8, 2026

    Hi Sanford,
    My point about using the Marketo Unique Code is that it can be used in place of a solution to generate a OTP and managing that without additional services.  I agree that a race condition can present itself on the creation of the code. I am not implying that it would be used until after the form is submitted and the lead becomes a “known” lead. My experience has been that the code is generated fast enough to be used on the confirmation page for the user to enter the code into a short form that will compare the code with the generated value in the lead profile.  The approach I have suggested could work something like this:

    1. Form is filled and onSubmit a script can evaluate some known patterns that have been observed to be suspicions.  (i.e. Freemail address + Title is C-suite)
      • If the submission doesn’t match your observation pattern it pass through to your general TY page.
      • If the submission does match your suspicious pattern, they are directed to a confirmation page that displays a single field form to enter the Marketo Unique Code, which can be displayed on the page. 
        • If the race condition occurs and there is no code value, a message with the a text link to “send me a code” can be presented. (This is better that automatically sending the code by email to an address that may likely bounce. The click to send action reduces the likelihood of that condition.)
    2. In the confirmation path, the simple form uses a form-temp field to contain the entered code which is compared to the Marketo generated value.
      • If the values match the lead can continue through the process of trusted leads.
      • If the value does not match, the lead can remain in its “quarantined” status.

    The point of this post was to suggest some ideas on how to think about other methods to separate suspicious leads from trusted leads.  The CAPTCHA solution is a tool that can be used, but I’ve seen and heard that a number of real leads can be missed if using it alone. I have also found that some users of Marketo do not have the resources to subscribe to verification services or ability to develop an OTP solution. Even though the unique code is generated for pURLs, it think it can be a convenient way to use it as a passcode in some use cases.

    Thanks for the comment and insight. Other thoughts?