credityes.escredityes.rocreditda.rocreditwow.esdaikredit.kzcredityes.com.uaHistoryGuide

📖 User guide

How to use the dashboard and what each metric means. Updated 20.07.2026.

1 What this report is

Internal analytics dashboard for the 6 credit-group sites (credityes.es, credityes.ro, creditda.ro, creditwow.es, daikredit.kz, credityes.com.ua).

It brings together in one place:

  • Google Ads data — spend, clicks, conversions, ROAS per campaign. Campaign-level totals go back 2 years (including paused and removed campaigns, so year-over-year comparison works); search-term breakdowns cover the last 180 days.
  • CRM data — real revenue from a CSV export that Roman receives by email from DoAffiliate daily. A script parses each record by its UTM tag (utm_campaign) and matches it to the corresponding Google Ads campaign — so each payout is attributed to the specific campaign that brought the customer. This is actual payouts, not the inflated Google Conv. Value. History goes back to May 2024.
  • Search terms — bucketed into categories relevant to the lending market (brand, competitors, préstamos, займы, etc.).
  • Bidding config — strategy, target ROAS/CPA, budget for each campaign.
  • Editing campaigns straight from the report (admin login) — you can change targets, budgets, bidding strategy, pause/enable without opening Google Ads UI.
  • Period comparison — previous period / previous year / custom range, Google-Ads-style side-by-side values in the KPI row and the Overview table.
All data in the page is AES-256 encrypted. Nothing is readable — not even via View Source or DevTools — until you log in. The decryption key is delivered by the server only after a successful email + password login.
Google Ads data refreshes every 4 hours — at 01:20, 05:20, 09:20, 13:20, 17:20, 21:20 Kyiv time (EEST/EET). CRM data refreshes once per day at 09:20 because the DoAffiliate export only arrives by email once a day (~09:00). All automatic — no manual action needed.

2 Account navigation

Tabs at the top — 6 sites + History + Guide (this page).

Top tab bar

Click a tab to switch to that site's report. Auth state and filter selections are preserved across tabs — no need to log in again when moving from credityes.es to daikredit.kz.

3 Login, roles and encryption

Login is mandatory. Without it the page shows only a lock screen — every number, campaign name and chart is stored as encrypted ciphertext and cannot be read even through View Source or browser DevTools. After a successful login the server hands your browser the decryption key and the report renders.

Auth widget

There are two account roles:

  • Admin (Roman, Emilia) — full access + editing: icons ✏️ 🔄 💰 next to every campaign (edit target / swap strategy / edit budget / pause-enable). Changes are written to Google Ads and logged in History under your name.
  • Viewer (shared team account) — sees everything, cannot edit. Edit icons are hidden and the server rejects any modification attempt from a viewer token. A grey VIEWER tag shows next to the name in the top-right corner.
Sessions last 30 days per browser — after that you log in again once. The session survives closing the tab, reloads and browser restarts. Click Logout to end it manually.

Ask Roman to add a new user — it takes under a minute (name + email → generated password, admin or viewer).

4 Filters

Date from / Date to

The date range all metrics are computed over. The picker goes back up to 2 years (depending on how old the account is). Note: Cards / Heatmap / Table are built from search-term data, which only covers the last 180 days — for older dates use Overview and the KPI row, which have the full history. The default range on first open is the last 180 days.

Date range + Quick periods

Quick periods

Shortcuts: Yesterday · 7d · 30d · 90d · All.

Compare to

Google-Ads-style period comparison. Four modes:

  • Off — no comparison.
  • Previous period — the same number of days immediately before the current range (30d → the 30d before them).
  • Previous year — the same calendar dates one year ago.
  • Custom range — pick any two dates in the "Compare range" fields.

When comparison is on, the KPI cards and the Overview table show both values side by side — the current number on top, "was X" with a green/red delta badge underneath. Campaigns that only existed in the comparison period still appear in Overview as rows with current values of zero. If the comparison range predates the account's Google Ads history, cost-based deltas show "no data" instead of a misleading ↑100%.

Campaigns

Checkbox list — includes every campaign of the account: Search, PMax, Display, paused (⏸ icon) and removed. All ticked by default. Uncheck to exclude a campaign from all calculations.

Ad groups (collapsed)

Collapsed by default — click (click to expand). The list shows all ad groups belonging to the currently-selected campaigns.

Group cards by

  • Campaign (default) — one card per campaign.
  • Ad group — one card per ad group.

Sort cards by

Cost / Conv. value / ROAS / Conversions / Clicks / Name.

Status filter

Status filter — Active / All / Paused
  • All (default) — every campaign including paused and removed.
  • Active only — only ENABLED campaigns.
  • Paused — only paused ones.

View

Four modes: Cards (default) · Heatmap · Table · Overview. See §6b — Alternative views for what each one looks like.

Cards per row · Top categories shown

1 / 2 / 3 columns on wide screens. How many top categories to render inside a card before the "Show more" toggle — default 3.

Settings persist across tabs

Date range, Compare mode, View, Status filter, sorting and grouping are remembered in the browser — switch from credityes.es to daikredit.kz and back, and everything stays as you left it. Dates are clamped to each account's own data window if it is narrower.

5 Top KPI row

KPI cards row
MetricWhat it means
CostGoogle Ads spend for the period
Google Conv. ValueConversion value reported by Google — inflated by ML attribution
Google ROASGoogle Conv.Value / Cost — Google's optimistic estimate
🎯 CRM Revenue (green border)Real revenue from the DoAffiliate CSV
🎯 REAL ROAS (CRM)CRM Revenue / Cost — true return on ad spend
🎯 REAL Profit (CRM)CRM Revenue − Cost — true profit before other costs
Clicks · ConversionsAd clicks and Google-reported conversions
% Cost ExcludedShare of spend on search terms already added as negatives
% Cost AddedShare of spend on search terms promoted to exact-match keywords
KPI numbers match the Google Ads UI. Cost, Clicks, Conversions and Conv. Value are computed from all channels — Search, PMax, Display — exactly like the Campaigns tab in Google Ads. (Only % Cost Excluded / Added come from search-term data, since they don't exist elsewhere.) Small differences vs live Google Ads are normal: data here is a snapshot refreshed every 4 hours, while Google keeps re-attributing conversions for 24–72 hours after they happen.
Rule of thumb: judge performance by the CRM metrics (green border), not by Google ROAS. Google ROAS is almost always inflated by modeled conversions.

Hover any KPI or per-card stat — a tooltip explains the exact meaning and formula. With Compare mode on, each card also shows the previous-period value ("was X") and a delta badge.

6 Campaign card (Cards view)

Campaign card

Card header

Campaign name on the left. Next to it — the bidding badge:

  • tROAS 200% — Target ROAS with its target value
  • tCPA €15 — Target CPA
  • MaxConVal 70% — Maximize Conv. Value with a target ROAS hint
  • MaxConv — Maximize Conversions without a target
  • ⏸ MaxConv — grey = paused campaign
  • MaxConv — amber = strategy has no target set (worth attention)

To the right of the badge:

  • 📁 All ad groups (5) — pick specific ad groups for this card only (not the whole page).
  • 📈 Trends — opens a modal with a daily line chart of categories (see §10).

Edit icons (admin role only)

  • ✏️ — change Target ROAS or Target CPA.
  • 🔄 — switch bidding strategy.
  • 💰 — change the daily budget.
  • ⏸ / ▶ — pause or enable.

Card stats

A single row: Clicks · Cost · Conversions · Google CV · Google ROAS · Google Profit · CRM Revenue · CRM ROAS · CRM Profit. CRM metrics have a green left border.

Split bar

The colored bar under the header shows how the campaign's spend splits across categories. One color = one category.

Category table

Top 3 categories (or as many as "Top categories shown" is set to) with clicks, cost, ROAS, status (how much of that category is excluded / added). The Show N more categories button expands the full list.

6b Alternative views: Heatmap, Table, Overview

The VIEW segmented control (in the filter panel) toggles how the report is drawn. You get the same underlying data displayed 4 different ways depending on what you're looking for.

Cards (§6 above)

Default view. One card per campaign with per-category breakdown, bidding badge, trends button, and edit icons.

Heatmap

Campaigns as rows, top search-term categories as columns. Each cell is coloured by that category's share of the campaign's spend — deeper green = more of the budget went there. Great for spotting "which campaigns spend the most on X category" across the account in one glance.

Heatmap view

Table

Dense sortable table — campaigns as rows, categories as columns, showing cost. Same information as Heatmap but numeric instead of colour. Click any column header to sort. Best when you want exact numbers.

Table view

Overview — all campaigns incl. PMax

A single table with one row per campaign, including Performance Max campaigns (which don't appear in the other views because they don't expose search-term data). No search-term breakdown here — just aggregate numbers per campaign, the way you'd see them in the Google Ads UI's Campaigns tab, plus the CRM columns on the right.

Overview view

Columns:

  • Campaign — name
  • TypeSEARCH / PMAX / DISPLAY / etc.
  • Bidding — strategy + target (e.g. MaxConVal 70%, tROAS 200%, tCPA €15)
  • Budget/day — daily budget in euros
  • Status — Enabled / Paused pill
  • Cost · Clicks · CPC · Google conv · CPA (Google) · Google CV · Google ROAS — Google Ads reported metrics. CPC = Cost / Clicks, CPA (Google) = Cost / Google conversions.
  • CRM purchases · CPA (CRM) · CRM revenue · CRM ROAS · CRM profit — real payouts from DoAffiliate (green vertical divider marks where Google stops and CRM starts). CPA (CRM) = Cost / CRM purchases — the true cost per real purchase.

Behaviour:

  • Any column header can be clicked to sort — click again to reverse direction.
  • Colour coding on ROAS columns: green ≥100% · amber 70-100% · red <70%.
  • Paused campaigns are greyed out (respects the Status filter — hide them with "Active only").
  • The TOTAL row at the bottom sums everything currently shown (CPC/CPA in TOTAL are computed from the total sums, not averaged).
  • Overview respects the date range and status filter, but ignores the Campaign checkbox filter — it always shows every campaign for the account.
  • With Compare mode on, every metric cell shows the previous value ("was X") with a delta badge, and campaigns that had spend only in the comparison period appear as extra rows.
Why Overview exists. The other three views are built from search-term data, so they cover only Search campaigns. PMax has no user-facing search-term breakdown, so it's invisible there. Overview closes that gap — it's the only place where you see PMax spend and its real ROAS from CRM.

7 Search-term categories

A script buckets search terms into categories specific to the lending market. Categories share the same numeric prefix across markets — only the label is translated. That's why bar colors and legends look consistent across all 6 reports.

#ESROUAKZ
01Brand credityesBrandBrandBrand
02CompetitorsCompetitorsКонкурентиКонкуренты
03Préstamos rápidosÎmprumuturi rapideПозики швидкіЗаймы быстрые
04Préstamos onlineÎmprumuturi onlineПозики онлайнЗаймы онлайн
05Préstamos genericÎmprumuturi genericПозики загальнеЗаймы общее
06–08Créditos rápidos/online/genericCredite …Кредити …Кредиты …
09–12Mini/Micro préstamo/créditoMini/MicroМіні/МікроМини/Микро
13Personal loansPersonalPersonalЛичные
14–16Dinero rápido/online/genericBani …Гроші …Деньги …
17ASNEF (bad credit)Birou de creditПогана КІПлохая КИ
18Sin documentosFara acteБез довідкиБез справки
19Sum-specific (€)Sum (RON)За сумою (грн)По сумме (тенге)
20Bizum
21Off-topic / Foreign
23Other

8 Editing campaigns

Edit Target ROAS modal

Once logged in, click the pencil / money / pause icon next to the bidding badge.

✏️ Change Target ROAS / CPA

Shows the current value. Enter the new one in % or €. Press Apply to Google Ads. Within 2–3 seconds the value is applied in Google Ads. On success the badge updates in-place. On error the message appears at the bottom of the modal.

Works for these strategies: TARGET_ROAS, TARGET_CPA, MAXIMIZE_CONVERSION_VALUE with target ROAS, MAXIMIZE_CONVERSIONS with target CPA.

💰 Change daily budget

Enter the new amount in euros. Modifies the underlying budget object (which is separate from the campaign) — so if the same budget is shared by several campaigns, the change affects all of them.

🔄 Change bidding strategy

Switches the campaign to a different strategy — e.g. from Maximize Conversions to Target ROAS. Available strategies in the dropdown:

  • Target ROAS — requires a target ROAS value (%). Google bids to hit that ratio.
  • Target CPA — requires a target CPA (€). Google bids to hit that cost per conversion.
  • Maximize Conversion Value — target ROAS is optional. Without it, Google just maximises total conv value within the budget.
  • Maximize Conversions — target CPA is optional. Without it, Google just maximises conversion count.
  • Maximize Clicks (Target Spend) — no target needed. Google buys as many clicks as the budget allows.
  • Manual CPC — you set bids yourself (keyword-level). Rarely useful for lending accounts.
Learning phase reset. Switching strategy resets Google's ML learning — expect volatile results for ~7 days after the change. Don't switch unless you have a real reason.

⏸ / ▶ Pause / Enable

One click flips the status. No confirmation is asked — be careful.

What you still cannot edit here: creating new campaigns, editing keywords / ad groups / ads / audiences / geos. For that — use the Google Ads UI.

9 History

The dedicated History tab at the top opens a page with a table of every change across all sites.

History page

Columns:

  • When — timestamp
  • Who — who made the change (Roman / Emilia)
  • Site — which site
  • Campaign — campaign name
  • Change — what changed: tROAS: 78% → 75%

Filters:

  • All users (default) / My changes only
  • All sites → dropdown to narrow to one country
  • All change types → tROAS / tCPA / Budget / Status
  • Search campaign name — free-text filter

Failed change attempts (Google Ads rejected the mutation) are recorded too and highlighted in red.

Retention: successful changes are kept for 180 days, failed ones for 30 days.

10 Trends — daily chart

Click 📈 Trends on any card to open the chart modal.

Trends modal with line chart

Shows daily spend or conversions per category for this campaign over 7 / 30 / 90 / 180 days. One line per category. Hover a line for the exact number on a given day.

11 See terms by category (XLSX)

The green button to the right of the report title downloads an Excel file with every unique search term over the last 180 days, bucketed by category with per-term cost.

Useful for negative-keyword hygiene: sort by cost, look at the top expensive terms in suspicious categories, add them as negative keywords in Google Ads.

12 Data refresh

  • Automatic — Google Ads every 4 hours (01:20, 05:20, 09:20, 13:20, 17:20, 21:20 Kyiv time). CRM refreshes once per day at 09:20 — DoAffiliate only sends the report once daily. Two launchd jobs on Roman's Mac pull data, rebuild the encrypted HTML blobs, push to Cloudflare Pages and to the private GitHub repo. Even with 4-hour refresh, individual conversion counts can differ from Google Ads UI by ~10-20% because Google keeps re-attributing conversions for 24-72 hours after they happen — that's a Google-side lag, not our pipeline.
  • Date range in the report header"Date range available: 2026-01-19 — 2026-07-17" — tells you which day the data goes up to.
  • Manual refresh: if you need fresh data mid-day — Roman can run in the terminal: bash ~/credityes-es-report/scripts/update.sh.

13 Troubleshooting

The page doesn't open, or looks outdated / missing new features

The browser is serving a cached copy. In order of escalation: Cmd+Shift+R (hard refresh) → open in an incognito window → DevTools (F12) → right-click the reload button → "Empty Cache and Hard Reload". The reports are large files, so plain refresh sometimes isn't enough.

Login is rejected with the right password

The token may have expired (>30 days). Just log in again.

Numbers differ slightly from the Google Ads UI

Two normal reasons: (1) data here is a snapshot refreshed every 4 hours; (2) Google itself keeps re-attributing conversions for 24–72 hours after they happen, so even a fresh pull won't match a live screenshot taken later the same day. Figures converge after 2–3 days.

Error when editing

Google Ads may reject a mutation (e.g. Target ROAS below its minimum, or campaign is archived). The exact error is shown at the bottom of the modal.

Missing CRM data for some dates

CRM may have gaps if a DoAffiliate report wasn't sent. Compare the date coverage across neighboring tabs.

Add a new user

Ask Roman — he seeds a new user into Cloudflare KV with one command (~30 seconds).

Log out

Click Logout in the top-right widget.

14 Privacy & security

  • All data in the pages is AES-256-GCM encrypted. Someone who has the URL but no account sees only a lock screen; View Source / DevTools reveal nothing but ciphertext. The decryption key lives in Cloudflare Worker Secrets and is handed to the browser only after a successful login.
  • The report is hosted on Cloudflare Pages (credit-report-5ty.pages.dev); source code and data also live in a private GitHub repo as backup (Roman-only access).
  • Two roles: admin (can edit campaigns) and viewer (read-only — the server rejects any write from a viewer token).
  • Passwords are stored hashed in Cloudflare KV: PBKDF2-SHA256, 100,000 iterations, unique salt per user. Nobody — including Roman — can read a password back.
  • The Google Ads API token stays only on Roman's Mac — it is never committed to any repo or embedded in any page.
  • All campaign edits require a valid signed session token, verified server-side; every change (and every failed attempt) is logged in History with the author's name.
  • HTTPS everywhere — Cloudflare Pages + Cloudflare Worker.