Email + password, or the master password alone.
Paste or upload a Google Ads CSV/TSV (title rows and "Total:" rows handled), or pull Microsoft Ads search terms live. The rule engine routes each term (order is semantics), dedups against the synced ground truth with blocking evidence, and sends only genuinely unclear terms to Gemini.
| Status | Search term | Negative | Match | Block in | Home | Revenue | Spend | Reason |
|---|
| Term | Negative | Match | Blocked by |
|---|
One collapsed row per (keyword, match type, account, source) with the groups it blocks. 'partial' = a shared list not attached to every enabled+serving campaign of any group — blocks nothing, so leaks keep surfacing. Live sync happens on the Integrations tab; manual CSV is the fallback layer.
| Account | Source | Rows |
|---|
One phrase per line. Blank list = the built-in default (ported verbatim from WP — the enforcement→HC rule can never silently no-op). Everything else (Gemini keys/model, Pipedrive fields, HC valuation, advisory thresholds, write-back settings, dashboard code) lives in the portal settings page under the nks module.
Fair-trial threshold = 3× account CPA (servable economics; HC valued at realised Ethos averages, unvalued HC excluded).
| Keyword | Spend | Clicks | Deals | Revenue | ROI | Last won |
|---|
| Keyword | Spend | Deals | Revenue | ROI | Last won |
|---|
Critical = blocks a revenue keyword in its home group · High = blocks its own home traffic / KEEP language · Medium = over-broad 1-2-word phrase/broad.
| When | Action | Summary | Status |
|---|
Long syncs run as resumable jobs on the 5-minute cron tick (no browser loop to babysit). The weekly history snapshot also runs itself every Tuesday 02:00 UTC.
| Kind | Key | Status | Attempts | State / error | Updated |
|---|
| Job | Started | Outcome | Summary |
|---|