Tuning Claim Gates

How and why to tune Verfi's claim-time gates for your acquisition strategy.

The Core Trade-off

Every claim gate trades volume vs. quality and exclusivity. Tighter gates mean fewer sessions clear — but each cleared claim carries higher confidence. Looser gates let more sessions through at the cost of accepting some mismatches or lower-quality leads.

There is no universally correct setting. The right thresholds depend on your lead economics: what you pay per lead, what a conversion is worth, and how much review capacity you have. Gates are a tool to express your own acquisition policy in code.

Gating is economically safe to experiment with. Claims that are rejected by a gate return 409 and are not consumed and not charged. You can tighten or loosen thresholds, observe rejection rates, and adjust without paying for the sessions you reject.

requireVerticals

Set this to the vertical(s) you actually buy. The gate rejects cross-sold or mislabeled leads — the "auto form sold as a home insurance lead" problem. When a claim request includes requireVerticals, Verfi checks whether the session's declared intent verticals overlap with your list. No overlap means rejection.

  • This is a hard categorical match — it is low risk to set tight.
  • A session with no declared intent is treated as a mismatch and rejected.
  • Rejected with 409 intent_mismatch.
Recommended default: Set to your actual buys. If you only purchase mortgage leads, set ["mortgage"]. There is little reason to leave this unset if you know which verticals you buy.
JSON — requireVerticals example
{
  "requireVerticals": ["mortgage", "home_insurance"]
}

requireVerifiedScore (0–1)

This gate controls how strictly the recorded behavior must match the declared vertical. Verfi computes a content-verification score by analyzing the session recording and comparing it against the declared intent. A score of 1.0 means strong alignment; 0.0 means little or no signal.

  • Higher threshold = you only pay for leads whose session content genuinely resembles the declared vertical.
  • Rejected below threshold with 409 verification_below_threshold.
  • The score is computed lazily on the first claim that checks it, then cached on the session.
Important caveat: A low score does not always mean fraud. Real publisher pages on a specific topic score meaningfully; thin or generic multi-vertical forms score low simply because they contain little vertical-specific content. A score near 0 on a generic lead form is expected, not necessarily suspicious. Keep this in mind when setting your threshold.
Recommended starting point: Start conservative — around 0.3–0.5 — and tune with real data from your own leads. Going straight to 0.8 on day one may over-reject legitimate leads from publishers using simple forms.
JSON — requireVerifiedScore example
{
  "requireVerifiedScore": 0.4
}

minQualityScore (0–100)

This gate is your bot and lead-quality floor. Verfi scores each session on a 0–100 scale based on behavioral signals — interaction patterns, timing, mouse movement, and other signals that distinguish human-driven sessions from automated or low-quality ones.

Use the table below as a rough guide to what score ranges typically indicate:

Score range Risk band
0–20 high_risk
21–50 elevated
51–79 normal
80–100 high_confidence_human
  • Rejected below threshold with 409 quality_below_threshold.
  • Raising toward 70+ is appropriate for premium or high-cost verticals where the cost of a bad lead is high.
  • Lowering it means you'd rather review borderline sessions manually than auto-reject them.
Recommended starting point: Around 50, which matches the product-gate recommendation and sits at the boundary between elevated and normal. Tune up toward 70+ for premium verticals; tune down if your review workflow can catch borderline cases.

Combining Gates & Gate Order

All three gates can be combined in a single claim request to express a complete policy. Gate evaluation runs in a fixed order:

  1. verticals — categorical match first
  2. verifiedScore — content-verification check second
  3. qualityScore — bot/quality floor last

Evaluation is fail-fast: the first gate that fails returns immediately. A 409 response tells you the first thing that failed, not everything that failed. If you want to know which of several gates would have failed, you can temporarily remove the earlier ones — but in production, the fail-fast behavior is intentional and keeps latency low.

A combined policy example — "mortgage leads, content-verified ≥ 0.5, quality ≥ 60":

JSON — combined gates example
{
  "requireVerticals": ["mortgage"],
  "requireVerifiedScore": 0.5,
  "minQualityScore": 60
}

This body, added to a claim request, means: only claim this session if it was declared as a mortgage lead, its recorded content scores ≥ 0.5 on mortgage-relevance, and its quality score is ≥ 60. Any failure returns 409 at the first failed gate.

Recommended Starting Points

These are starting points — not guarantees. The right values depend on your lead economics, publisher mix, and tolerance for false rejections. Treat every number here as a hypothesis to test with your own data.
  • requireVerticals — set to your actual buys immediately; this is a low-risk, high-value gate.
  • requireVerifiedScore — start around 0.3–0.5; observe rejection rates and tune from there.
  • minQualityScore — start around 50; raise toward 70+ for premium / high-cost verticals.

Remember that 409'd claims are not consumed and not charged. Running a period of parallel observation — logging what would have been rejected without actually gating — can give you confidence before tightening.

Next step: Try these settings in the API Playground, which lets you build claim requests interactively and see the live cURL output before integrating into your pipeline.

Ready to integrate?

Set your claim gates in the API Playground or go straight to the full integration guide.