We rebuilt the spam checks on merchexpresscanada.ca so every one runs on the server. Bot-style quote requests now fail before they reach the sales inbox. Live tests on October 20, 2026 confirmed the server rejects all 3 attack methods.


| Project detail | Summary |
|---|---|
| Client | Merch Express (formerly Budget Promotion), Calgary, Alberta |
| Industry | Custom apparel and promotional products |
| Scope | Spam protection for 6 quote, contact and webstore request forms |
| Platform | Shopify storefront with a separate form server |
| Main tool | Cloudflare Turnstile, plus 5 custom server-side checks |
| Timeline | Spam began in August 2026; live tests passed October 20, 2026 |
AurixLab's web development and SEO teams worked on this project together. The web development and cybersecurity team built the 6 server-side layers and ran live tests. The SEO team documented the work in this case study.
Merch Express is a Calgary company that makes custom apparel and promotional products. It has operated since 1994 and traded as Budget Promotion until its recent rebrand. The company reports more than 20,000 customers across Canada.
Its buyers include schools, sports teams, trades crews and corporate offices. The team decorates orders in-house with screen printing, embroidery and DTF printing. Every order begins with step one of its process: a quote and creative consultation.
That makes the quote inbox the start of the sales pipeline. Customers reach it through merchexpresscanada.ca, which we built on Shopify.
In August 2026, bots began sending fake quote requests through the Merch Express forms. The requests used invented names like "Zydi Prhurtv (Gimxk LLC)" and "Xhjmdn Iqxtojc (Xehlsbuvc LLC)". They arrived 3 at a time, within about 3 minutes.
Each fake quote cost the business in 3 ways:
The old spam checks ran only in the visitor's browser, so bots skipped them. Browser code runs on the visitor's own device. A bot that posted straight to the quote server never loaded that code. The old server accepted whatever arrived.
Cloudflare's guide Validate the token says the browser widget alone does not protect a form. An attacker can send any string to the form endpoint without passing a challenge. The rebuild set one rule: every check runs on the server, beyond a bot's reach.
We built 6 layers of protection, and all 6 run on the Merch Express server. Each layer stops a different kind of attack. A bot that gets past one layer still meets the next.
The first layer is Cloudflare Turnstile, a free tool that replaces CAPTCHA puzzles. It checks visitors in the background, so most people never see a challenge.
| # | Layer | What it checks | What happens to spam |
|---|---|---|---|
| 1 | Cloudflare Turnstile | Cloudflare confirms the visitor is a person and issues a one-time pass. The server checks that pass with Cloudflare through a secret key kept on the server. | No valid pass means no quote. The server rejects the request. |
| 2 | Website-only access | The server accepts submissions only from the Merch Express website itself. | Scripts that post from anywhere else get "Forbidden" (HTTP 403). |
| 3 | Submission limits | Each connection gets a set number of submissions per hour and per day. | The server cuts off bursts with HTTP 429 ("Too Many Requests"). |
| 4 | Honeypot field | Each form holds a hidden field. People never see it, but bots fill every field they find. | The bot sees a success message, and the server sends nothing. The bot never learns the server caught it. |
| 5 | Field validation | The server re-checks every field. It requires a name, a valid email and a 7 to 15 digit phone number. It also checks lengths and quantities. | The server rejects malformed or junk entries. |
| 6 | Gibberish-name detector | The server spots machine-made names like "Xhjmdn Iqxtojc". | Staff get the email marked [CHECK], and no automatic follow-up goes out. The detector never blocks a customer. |
The rebuild also closed the injection route. The server now cleans every submitted value before it enters a staff email.
Every submission now passes 5 server checks in a fixed order. Only a submission that clears all 5 reaches the team.
Two things happen before the visitor clicks submit:
A failed check stops the submission at that step. The name check only flags, so real quotes with unusual names still arrive.
All 6 live forms that send quotes or messages share the same protection.
| Form type | Where it appears |
|---|---|
| Quote forms (4) | Homepage quote panel, product page quote form, Meta ads quote page, Calgary Chamber quote page |
| Contact form (1) | Contact Us page |
| Webstore request form (1) | Club and Team Webstores page |
The forms feed 3 server entry points: quote, contact and webstore request submissions. All 3 run the same checks. A bot that bypasses the forms still meets the same 6 layers.
All 3 attack-style tests against the live server failed on October 20, 2026. We ran each test the way the spam bots worked.
| Test sent to the live server | Server response |
|---|---|
| A direct submission from outside the website, the method the spam bots used | Refused: "Forbidden" (HTTP 403) |
| A submission that claimed to come from the website, with no Cloudflare pass | Rejected: "Captcha verification failed" |
| A submission with a forged Cloudflare pass | Rejected by Cloudflare: "Captcha verification failed" |
The gibberish-name detector caught all 8 real spam names in testing. It raised no false alarms on 9 unusual real names. The detector still only flags names, so an unusual real name always reaches the team.
Real customers see no image puzzles, and most never notice the check at all.
Load speed affects search visibility as well as visitors. Google's Search documentation says its core ranking systems reward a good page experience. Page speed is part of the technical work in our SEO services in Calgary. The team kept the script off every page view without form activity.
Merch Express can rotate its keys or change its limits without new code.
Three lessons from this project apply to any business that takes quotes online.
We can review your quote and contact forms and add the same server-side checks. This work is part of AurixLab's web design and development services in Calgary. Book a free 30-minute growth mapping call to start.
Cloudflare Turnstile is a free tool that confirms a visitor is a real person. It works in the background, so most people never see an image puzzle. Turnstile issues a one-time pass when the check succeeds. The website's server then confirms that pass with Cloudflare before it accepts a form.
The old checks ran only in the visitor's browser. Browser code runs on the visitor's own device, so a bot can skip it. The spam bots posted straight to the quote server and never loaded the form. Server-side checks close that gap because a bot cannot reach or change them.
On merchexpresscanada.ca, normal browsing carries no extra load from Turnstile. The script weighs about 750 KB. It loads only after a visitor starts filling in a form. Visitors who only browse products never download it, so their page speed stays the same.
No. Merch Express customers never see image puzzles or traffic-light tests. Turnstile checks most visitors silently in the background. An unusual visitor may need to tick a single box. Quotes still go through if Cloudflare is unreachable, and the other server checks stay active.
Yes. The Merch Express site runs on Shopify. Its public Turnstile key sits in the Shopify theme. The secret key and all 6 checks run on a separate server. We can build the same setup for forms on other Shopify stores.