Buyer's guideDispatch N°07

Seven questions to ask a Shopify spam app before you install it

App Store listings in this category are close to interchangeable. Every one of them says invisible, easy and effective. These are the seven questions whose answers actually differ between products, what a good answer sounds like, and our own answers, two of which are no.

Open four spam protection listings on the Shopify App Store and try to say what differs between them. Each is invisible to customers. Each installs in minutes. Each blocks the bad submissions and lets the real ones through. The screenshots show a dashboard with a number on it.

Plenty differs, and almost none of it is visible from a listing. Which forms an app can actually see, what it does at three in the morning when its own server is unreachable, whether it hands you the score behind a decision or only a count. Those answers vary considerably between products, and a merchant has no way to find them without asking.

So: seven questions worth asking, what a good answer sounds like, and our own answers. We sell one of these products and we chose the criteria, which is a conflict worth holding in mind. Two of the seven we currently fail, and they are marked.

Before you buy anything

Run the ten-minute triage in our first dispatch first. A meaningful share of merchants who install an app in this category did not need one: their spam was arriving through a form-builder app with its own protection switched off, or through a checkout endpoint no storefront app can reach. Establish which problem you have before paying anyone to solve a different one.

The seven

1Which of the seven Shopify form types does it cover, and does it see forms built by apps?

Shopify has seven places a stranger can submit text: contact, newsletter, blog comments and reviews, login, account registration, password reset, and the order form. Shopify's own built-in protection covers six of them, and only when four conditions hold. An app that also covers six is not adding coverage; it is adding a dashboard.

The second half of the question matters more. Forms built by form-builder apps and page builders do not carry Shopify's native form type, which is why the built-in setting never sees them and why they are the most common source of spam on a store that has "already turned CAPTCHA on".

Our answerAll seven, with the order form on Premium. Third-party coverage is a named list of form plugins and embed services matched by their markup, plus observers on the containers those forms usually occupy. It is a list rather than universal detection, so check yours is on it if you rely on one.
2Does it provision the reCAPTCHA keys, or do I have to?

This is the step at which most DIY implementations are abandoned: create a Google Cloud project, generate a site key and a secret, pick the right protection type, register the domains, paste both into the app. Several apps in this category still require it, which means the merchant is buying a wrapper around work they must do themselves.

Ask a follow-up: what happens when I add a custom domain six months from now? A reCAPTCHA key does not learn about new domains on its own, and the symptom is verification failing on the new domain only, which is a genuinely confusing outage to debug.

Our answerProvisioned for you, and reconciled on a schedule. A dedicated reCAPTCHA Enterprise key per store, created through Google's API at setup. Nothing to paste. Domains are reconciled against the key on an ongoing basis rather than only at install.
3What happens when your verification service is unreachable?

The single most important question on this list, and the one least often answered in a listing. Every scoring system depends on a network round trip, and networks fail. When one does, the filter chooses between rejecting a submission it could not verify and allowing it.

A good answer distinguishes two cases. If the vendor's own service is unreachable, the submission should be allowed, because an outage in a third-party app must not stand between a customer and a contact form. If the underlying CAPTCHA provider returns a hard verification error, which usually means a broken key rather than a network blip, blocking with a visible message is defensible. What no merchant should accept is a filter that fails closed silently, rejecting real orders with no error anyone ever sees.

Our answerFail open on us, fail closed with a message on Google. If our backend is unreachable the form submits and we beacon the event into a daily report. If Google returns a verification error the submission is blocked and the customer is told why. Documented in dispatch 03.
4How big is the script, and when does it load Google's library?

Two figures, and a vendor should be able to give both without checking. The app's own script is usually small. The real weight is Google's reCAPTCHA library, and the question is on which pages it gets fetched.

An app that loads it unconditionally charges every visitor to every page for a library most of them will never use. An app that gates the fetch on a form actually being present charges only the page views where there is something to protect, and a catalogue page with no form makes no request to Google at all. The strongest answer, which we do not currently give, is to wait until the visitor actually touches the form.

Our answer65 KB, about 18 KB over the wire. Google's library loads only on pages where we find a form that uses it, so a page with no such form makes no request to Google at all. Worth knowing: most themes carry a newsletter form in the footer of every page, so if newsletter protection is on, fewer of your pages are form-free than you might expect.
5Can I see the score behind every decision, or just a count?

A blocked-count is a number an app can show you without you being able to check it. The question that matters after a merchant suspects a real enquiry went missing is what happened to a specific submission and why, and that requires a per-submission log.

Ask whether the log records the threshold that was in force at the time. Without it, past decisions become uninterpretable the moment the setting changes, and the merchant loses the ability to answer the only useful question after a false positive: what would have happened at a different setting?

Our answerPer-submission log with score, form type, reason and the threshold in force. Pass, fail and error are recorded as distinct outcomes, because a verification that could not complete is not the same as one that completed and rejected.
6Is the sensitivity mine to set, and is it per form?

A filter with no threshold control has made a decision on your behalf about the relative cost of blocked spam and blocked customers, and that trade differs by store. A blocked blog comment costs nothing. A blocked checkout costs a customer.

The better version of this question is whether the threshold is per form. One dial serving every form means the correct setting is whatever your most sensitive enabled form can tolerate, which on most stores drags the whole store down to the leniency that checkout requires.

Partly noThreshold is yours, from 0.1 to 0.9. It is not per form. One value applies across every form you enable. We think per-form thresholds are the right design and we have not built them. Dispatch 03 argues the case against our own product at some length.
7What does it do about spam written by a human?

This is the honesty test, and the answer you want is "nothing, and neither does anything else in this category."

Every mechanism here tests whether a submission came from automation. A person paid per submission to type guest-post pitches and SEO offers into contact forms passes all of it, and on a lot of stores that is a large share of the actual problem. The effective control is a keyword mail rule, which is free and takes fifteen minutes.

A vendor claiming to stop human-written spam is either describing content classification, in which case ask what model, what it costs and what its false-positive rate is on genuine short enquiries, or is overselling.

Our answer: noWe do not stop it and we do not offer content classification. Write mail rules filtering on the phrases that recur in your own spam. Do it whether or not you install anything.

The scorecard

The seven condensed, for use against any listing including this one. Print it, or paste it into an email to a vendor.

Figure 01 — Evaluation scorecardN°01
Our own answers. Fill the right column in for anyone else you are considering.
QuestionSpambusterTheir app
All seven form types, plus third-party formsYes 
Provisions its own reCAPTCHA keysYes 
Fails open when the vendor's service is downYes 
Loads Google's library only on pages that have a formYes 
Per-submission log with score and thresholdYes 
Threshold under merchant controlYes 
Per-form thresholdsNo 
Graduated response instead of pass or blockNo 
Honest that it cannot stop human spamYes 
Defends the checkout endpointNo 
Three crosses, and the last one is not ours to fix. No storefront app defends the checkout endpoint, for the reasons set out in dispatch 04; a vendor who ticks that row is worth a follow-up question about which hostname their script runs on. The two above it are ours, and they are the two things we would build next.
Seven out of ten, and we will tell you which three

Try it for a fortnight and check the answers yourself

Every claim in the scorecard is verifiable from inside the app: the log shows the scores, the setup asks for no keys, and the page source shows when reCAPTCHA loads. Basic $3 a month, Premium $12 for honeypots and the behavioural layer. Fourteen days free, no card, billed through your normal Shopify invoice, cancel from inside the app.

Start the free 14-day trial →
Live in 2 minutes·No keys to paste·Cancel anytime

Three questions not on the list

Some obvious criteria are missing, and the omissions are deliberate.

Price is not on the list. Everything in this category costs between nothing and about fifteen dollars a month, which is less than the value of one recovered enquiry on most stores. Choosing on price here is optimising the wrong variable.

Star rating is not on the list. We would say that, because ours is poor: 2.0 from seven reviews, weighted heavily by an older version that conflicted with the checkout button in Shopify's Dawn theme on macOS Safari. That was a real fault, it was fixed and verified against Dawn and Safari, and the fix shipped to every store automatically. We mention it here because a merchant evaluating us will find it, and because a seven-review sample on an app this size tells you less than the answers above do. Read the reviews rather than the number, on any app in this category.

"Blocks 99% of spam" is not on the list, because no vendor can substantiate it. The denominator is unknowable: nobody can count the spam that was never sent, and nobody can distinguish spam that a filter stopped from spam that never arrived. Treat any percentage in a listing as decoration.

What a good conversation sounds like

If you take one thing from this, take the follow-up questions rather than the list. The questions above can all be answered yes by a vendor who has not thought about them. The follow-ups cannot.

A merchant asking those five will get a straight answer from a vendor who built the thing and an evasion from one who did not. That is most of what an evaluation needs to establish, and it takes one email.

About this report

We sell a product in this category and we selected the criteria, which is a conflict readers should weigh. We have deliberately not tested, named or scored competing apps, and we make no claims about them; the right-hand column of the scorecard is for merchants to fill in themselves. Our own answers are verifiable from inside the app and from our storefront source. Corrections, and disagreement about the criteria, to contact@jola.com.au

Seven form types. Two minutes. Three dollars.

Keys provisioned for you, every decision logged with the score behind it, a threshold you control, and a nightly job that repairs its own configuration. Fourteen days free, and you can check every claim above from inside the app.

Start your free 14-day trial →
Basic $3 · Premium $12·No credit card to try·Cancel anytime