What we build Where it runs Who we are Pricing Blog Book the diagnostic
ENESFR

← BLOGDATAJULY 20267 MIN READ

A dashboard that updates itself, three times a day: the full architecture

No BI SaaS, no monthly rent, no "hang on, let me pull the report." This is the exact architecture running in production for our brands — and why we prefer our own code over Looker.

The problem: Monday disappears into building the report

In nearly every ecommerce brand we've audited, the same thing happens: Meta says one thing, Shopify another, Google another, and someone on the team loses Monday morning copying cells into a sheet to "make it tie out" — if they're lucky. The decision that matters (scale, pause, change creative?) gets made on Tuesday, with Friday's data.

The usual answer is to rent a BI tool (Looker Studio, Power BI, Triple Whale). Our problem with that: the connectors fail exactly where it counts — the fine reconciliation between platforms — and they add a monthly rent for life to a problem you can solve with three scripts.

The architecture: three pieces, zero rent

The whole system is three pieces you already know:

  • Python fetchers — one script per source (Meta Graph API, Shopify Admin, Amazon SP-API, Google Ads). Each pulls its raw numbers and drops them into JSON.
  • A static HTML file with Chart.js — the dashboard is a single file that reads those JSON files. No backend, no database, no login to maintain (or with a password if the brand asks for one).
  • GitHub Actions as the clock — a cron workflow that runs the fetchers and redeploys to Vercel. Three times a day, on CDMX time.
# .github/workflows/dashboard.yml — the heart of the system
on:
  schedule:  # 07:00 · 13:00 · 19:00 CDMX
    - cron: "0 13,19,1 * * *"
jobs:
  update:
    steps:
      - run: python fetch_meta.py && python fetch_shopify.py
      - run: npx vercel deploy --prod

The secrets (API tokens) live in GitHub Secrets — never in the code. The repo is private. And because the deploy fires from the Action, the dashboard updates even when everyone's laptop is off.

The golden rule: reconcile to the cent

A dashboard that "roughly ties out" is worse than no dashboard: nobody trusts it and everyone goes back to the sheet. That's why every run checks that what Meta reports as attributed revenue and what Shopify records as paid sales close to the cent — and if the difference (Δ) drifts out of range, it fires a push alert instead of publishing broken numbers.

In production: for a premium retail brand, the dashboard reconciles 4 sources (Amazon MX, Shopify, Meta and Google) in a single weekly view, with Δ < $0.01. The Monday meeting stopped being about "where did this number come from" and became about what to do with it.

Why not Looker (or Triple Whale)

  • Cost: $0/mo in platform vs $100–$500/mo for life. The system pays for itself in the first month.
  • Ownership: the code and the data belong to the brand. If we stop working together tomorrow, the dashboard keeps running.
  • Flexibility: does the brand also sell in physical stores and want to cross digital ↔ physical? That's one more fetcher, not a support ticket.

What you need to replicate it

API access to your platforms (read-only), a private GitHub repo and a Vercel account. That's it. If your team doesn't code, this is literally what we build under the Data & Dashboards capability — dashboard running from week 1.

Two projects per quarter

Start with the number you don't have.

Three weeks, read-only access, no cost, and a written scope you keep, whether you continue or not.

NEXT ON THE BLOG → YOUR REAL ROAS DOESN'T LIVE IN META: IT LIVES IN THE SHOPIFY RECONCILIATION

Book the free diagnostic