← Studio2025 · Solo dev

Machzirim - Tax Refund Lead Funnel

Multi-campaign lead funnel for an Israeli tax refund service - a conditional Hebrew questionnaire that qualifies leads,feeds a CRM, and routes users into a digital signing flow. Zero backend, Paired with article blog for organic SEO, Israeli accessibility compliance (IS 5568)

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • Zod
  • n8n

The problem

Tax refund services live or die by their lead funnel. The client was running paid campaigns across Facebook, influencer partnerships, and affiliate channels - but had no way to tag leads by source, show different fee structures per campaign or track partial submissions when users dropped off mid-form..

No source attribution, no partial saves, no recovery. A user who answered some questions and closed the tab was simply lost.

What we built

Machzirim is a conversion-optimized funnel with a multi-step Hebrew questionnaire at its core:

  • Campaign attribution - each channel gets its own entry URL. The user lands on the same homepage every time, but the source is tracked silently throughout the session.
  • Smart qualification - a conditional questionnaire collects only what's relevant. Partner details appear only for married users. Questions adapt to the answers already given.
  • Progressive saves - each question advance fires a background save to specific backup sheet. So leads that drop off mid-form arrive in the CRM' backup so the sales team can follow up on.
  • CRM handoff - final submission posts to the Customer's CRM provider, which returns a redirect into a digital signing flow. The entire post-signing sequence - agreement, supplemental documents, confirmation - is handled on-site.
  • Campaign-aware deal display - each entry URL carries its own fee percentage, deal terms, and optional cooperation partner logo.
  • Content layer — a Markdown-driven article blog targets organic search and builds trust before the user ever reaches the form.
  • Video testimonials, IS 5568 accessibility menu, cookie consent - full Israeli legal and accessibility compliance.
  • RTL Hebrew throughout - Israeli ID validation, date inputs, ₪ formatting. First-class, not patched in.

Technical highlights

The campaign attribution system is a silent redirect layer - /c/[name] writes the source to localStorage and forwards to the homepage, so every channel sees the same UX but the data layer sees the full picture.

The questionnaire engine evaluates each question's condition at runtime against the current form state. No branching logic scattered across components - each question is self-contained and skippable.

The dual-write pattern separates concerns cleanly: Google Sheets gets every partial answer as a fire-and-forget background call; the CRM gets the final payload only on submit. A failed background write never blocks the user.

Zero backend - the app is a Next.js frontend. The server action is an authenticated proxy to n8n. All state lives in React or localStorage.

What we learned

The progressive-save pattern (write on every step, not just submit) turned out to be the most valuable technical decision. Leads that would have been lost to a page refresh or a phone call now arrived in the CRM as partial profiles, and the sales team could follow up proactively.

The Google Sheets backup was designed as a safety net. It became the client's primary workspace.

The sales team found it faster to work the initial calls from Sheets - scan the list, call, qualify - and only promote serious leads into the CRM manually. What started as infrastructure became the actual product for them.

Designing for Hebrew meant RTL wasn't an afterthought button alignment, progress bars, form flow, and even the tone of error messages needed to feel natural to an Israeli user. The questionnaire reads like a conversation, not a bureaucratic form.

The lesson: in lead-generation work, the client's operational workflow matters as much as the technical one. Build observable data into the system from day one, even if "just as a backup" - because that's where the work actually happens.

The client's conversion problem wasn't just the form it was attribution. Once every campaign had its own entry URL with silent tracking, the client could finally see which ad creative and which partner drove qualified leads versus bounces.

The client's conversion problem wasn't just the form, it was attribution. Attribution was the other unlocked. Once every campaign had a silent entry point, the client could finally see which creative and which partner drove qualified leads versus bounces. That visibility changed how they bought media.