Everything you need to install, configure, and get the most out of AttentionVerify from first activation to Enterprise white-labeling.
AttentionVerify installs like any WordPress plugin and requires no coding. The full setup from ZIP file to your first verified coupon takes about 10 minutes.
attention-verify-free.zip note where your browser
saves it.
With the plugin active, there are two things to set up before your first customer sees the widget:
This is the core mechanic behind every part of the plugin worth understanding end-to-end before you configure anything else.
95% is the default on every plan. Pro and Enterprise can change this to any value via the Custom Attention Threshold setting see Upgrading to Pro.
This is what keeps the reward from being easily gamed. In plain terms, it protects against:
AttentionVerify uses your own Firebase Firestore project to log anonymous session data attention timers, completion status, and timestamps. No data ever touches OMNIYA servers.
firebaseConfig object this is
what you'll copy into the plugin.
In AttentionVerify → Settings → Firebase, six
fields are waiting for values straight out of the
firebaseConfig object Firebase just showed you:
| In firebaseConfig | Paste into plugin field | Looks like |
|---|---|---|
apiKey |
Firebase API Key | AIzaSy... |
authDomain |
Auth Domain | your-project.firebaseapp.com |
projectId |
Project ID | your-project |
storageBucket |
Storage Bucket | your-project.firebasestorage.app |
messagingSenderId |
Sender ID | 123456789012 |
appId |
App ID | 1:123456789012:web:abc123 |
Paste these into Firestore Database → Rules in your Firebase Console. They don't just restrict writes to the sessions collection they constrain the exact shape of each write (required fields, and only those fields, so nothing like an image or extra field can ever be attached to a session document), and prevent a completed session from being silently rewritten:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /sessions/{sessionId} {
allow get: if true;
allow list: if false;
allow create: if request.resource.data.keys().hasAll(['session_id','ad_id','completion_status','created_at'])
&& request.resource.data.keys().hasOnly(['session_id','ad_id','completion_status','attention_duration','face_lost_count','head_moved_count','tab_switch_count','fail_count','created_at','updated_at'])
&& request.resource.data.completion_status == 'in_progress'
&& request.resource.data.session_id is string
&& request.resource.data.session_id.size() < 200;
allow update: if resource.data.completion_status == 'in_progress'
&& request.resource.data.keys().hasOnly(['session_id','ad_id','completion_status','attention_duration','face_lost_count','head_moved_count','tab_switch_count','fail_count','created_at','updated_at'])
&& request.resource.data.session_id == resource.data.session_id
&& request.resource.data.ad_id == resource.data.ad_id
&& request.resource.data.completion_status in ['in_progress', 'verified', 'failed'];
allow delete: if false;
match /events/{eventId} {
allow create: if request.resource.data.keys().hasAll(['type','message','timestamp'])
&& request.resource.data.keys().hasOnly(['type','message','timestamp']);
allow read, update, delete: if false;
}
}
match /publisher_stats/totals {
allow get: if true;
allow list: if false;
allow write: if request.resource.data.keys().hasOnly(['total_seconds_watched','completed_attention','uncompleted_attention','updated_at']);
allow delete: if false;
}
match /{document=**} {
allow read, write: if false;
}
}
}
The full, always-current version of these rules along with an
explanation of what they do and don't protect against is in the
plugin's readme.txt under "Firestore Security Rules".
Back in AttentionVerify → Settings → Firebase, click Save & Test Connection. A green confirmation means the plugin can write to Firestore successfully.
allow create: if true;) in production they
allow anyone to read and write your entire database, with no
restriction on document shape or size.
App Check is an additional layer on top of the rules above it confirms that requests reaching your Firestore database are genuinely coming from your own site's widget, not a scripted client that copied your public Firebase config. It's configured in your own Firebase Console; the plugin can't turn it on for you, but once you've enabled it, the plugin is ready to use it.
Every setting available on the Free plan lives under AttentionVerify → Settings. A few fields need info pulled from elsewhere in wp-admin here's exactly where to find each one.
These authenticate the plugin against the WooCommerce REST API so it can generate coupons on your behalf.
ck_) and Consumer Secret (starts
with cs_) shown on the confirmation screen, and paste
both into AttentionVerify's settings.
The fallback video shown on any product that doesn't have its own video assigned. Either paste a direct video file URL, or click Choose from Media Library to select a video you've already uploaded to WordPress.
Some fields including the shortcode's
product_id parameter later in this guide ask for a
specific product's numeric ID. Two ways to find it:
post=123. That number is
the ID.
post.php?post=123&action=edit.
| Setting | What it does |
|---|---|
| Discount Amount (%) | The percentage discount applied to the auto-generated coupon on verified completion. |
| Coupon Prefix |
Text prepended to every generated coupon code, e.g.
ATV-XXXXXX.
|
Pro is purchased through Freemius checkout, then activated with a license key. There's a fast automatic path and a manual fallback in case the automatic one doesn't go through.
Immediately after purchase, Freemius sends a confirmation email containing your license key and a direct activation link. Click that link while logged into your WordPress site and the license activates automatically no copy-pasting required. This is the recommended path for most stores.
If the email is delayed, missed, or the link doesn't work for any reason:
All Free features remain, plus the settings page unlocks a new "Pro" tab.
| Pro setting | What it does |
|---|---|
| Custom reward message | Replace the default "Attention verified" copy shown to customers with your own text. |
| Coupon expiry control | Set how many hours or days a generated coupon stays valid. |
| Watermark removal | Removes the "AttentionVerify" watermark from the camera widget. |
| Custom attention threshold | Change the verified-attention requirement from the 95% default to any value you choose. |
| Advanced analytics | Adds drop-off funnels and per-product breakdowns to the analytics dashboard. |
| CSV export | Export raw session data from the analytics dashboard for external reporting. |
Enterprise is custom-scoped for multi-site agencies and larger stores, and isn't self-serve pricing and onboarding are handled directly with the OMNIYA team.
Reach out using either of the same channels available on the pricing section of the homepage:
Your settings page gains an "Enterprise" tab with the following controls:
| Enterprise setting | What it does |
|---|---|
| White-label branding | Set your own brand name, logo, accent color, and widget title/footer text the "AttentionVerify" name is fully replaced. |
| API-based reward webhook | Instead of a WooCommerce coupon, send verified-completion events to your own endpoint to trigger custom rewards. |
| Custom attention threshold | Same as Pro, but configurable per-site across an unlimited number of installs. |
| Priority Video Loading | Speeds up video load time on high-traffic stores, so the verification video starts faster and fewer shoppers drop off before verification even begins. |
Videos are assigned per-product, not site-wide each product can show a different ad.
You are not limited to one video per store multiple different videos can be assigned to multiple different products, one video per product, repeatable across your entire catalog. This is managed in bulk from AttentionVerify → Settings → Per-Product Video Management, where every product is listed alongside its currently assigned video for quick editing without opening each product individually.
Most stores never need the shortcode AttentionVerify automatically injects the widget on product pages. Use it manually when you want the widget somewhere the automatic injection doesn't reach: a custom page template, a landing page, or inside a widget area.
[attentionverify product_id="128" video_url="https://youtu.be/example" duration="30"]
| Parameter | Required | Description |
|---|---|---|
product_id |
Yes | The WooCommerce product ID the verified coupon should apply to see finding a Product ID above for how to look this up. |
video_url |
No | Overrides the product's assigned video for this specific placement. |
duration |
No | Seconds of verified attention required before the reward unlocks. Defaults to the site-wide attention threshold if omitted. |
Found under AttentionVerify → Analytics, the dashboard summarizes every verification session logged to your Firebase project.
| Metric | What it means |
|---|---|
| Verified sessions | Total sessions that reached the attention threshold and received a reward. |
| Completion rate | Verified sessions divided by total sessions started, as a percentage. |
| Average attention duration | Mean verified watch time across all sessions, in seconds. |
| Drop-off point | The moment in the video where most customers lose attention or cancel (Pro+). |
Click Export CSV in the top-right of the dashboard to download raw session-level data for the selected date range useful for feeding into your own BI tools or ad-spend reporting.
This message replaces the verification widget once a Free-plan site has used all 100 verified sessions included for the current month.
No. Face detection runs entirely in the browser via MediaPipe. Only session metrics attention duration, completion status are saved to your own Firebase Firestore. No biometric data is ever collected or stored.
A 1–1.5 second grace buffer absorbs natural blinks and minor head movements. The timer only pauses on a clear loss of attention: face leaves frame, head turns significantly, or the tab is switched.
Yes, but remember the Free and Pro plans are licensed to one site. Activating on staging will deactivate your production license until you switch it back.
The widget will still display and track locally, but sessions won't be logged, so the Analytics dashboard and coupon generation (which reads verified status from Firestore) won't work. Use Save & Test Connection in Firebase Setup to catch this immediately.
Chrome, Firefox, and Safari on both desktop and mobile. Camera access requires HTTPS, which your store should already have for WooCommerce payments.