Data & coverage
Pulsy’s analysis is only as wide as the data behind it. Amazon data and off-Amazon data feed it through different ingestion paths — which is the thing to internalize, because it sets what “Pulsy can see channel X” actually means.
Amazon — native
Section titled “Amazon — native”Amazon Ads data (Sponsored Products / Brands / Display, DSP, AMC) is ingested into
the PULSEAD schema and surfaced through the six semantic analysts. This is the
default, automatic path — see the data model for what’s
covered and how current it is (refreshed nightly).
Off-Amazon — eight channels, mixed ingestion
Section titled “Off-Amazon — eight channels, mixed ingestion”Pulsy can also analyze off-Amazon advertising, across eight channels:
Meta · Google Search · Google P-MAX · Snapchat · Pinterest · TikTok · GA · Shopify
The current SQL has two paths:
- API-backed: Meta, TikTok, Google Search, Google P-MAX, and Snapchat are
assembled from the corresponding PULSEAD/API tables. Snapchat uses the manual
source only before
2026-01-22; API data is used from that date onward, with profile metadata and currency conversion applied. - Manual upload: Pinterest and other manual
MEDIArows, plus GA and Shopify, arrive through the deliberateoff-amazon-uploadpipeline:
① Download a CSV from each channel's own dashboard ↓② Submit it via a Google Form (pick the advertiser, attach the CSV) ↓③ Apps Script parses it into a Google Sheet (Off_amazon_data tab) ↓④ A once-daily job loads the sheet into Snowflake (~00:30 KST per the design) (raw landing table: OFF_AMAZON_PERFORMANCE_BY_MANUAL_UPLOAD) ↓⑤ The data lands in the reporting surfaces Pulsy queries: • media performance + Amazon Attribution → DAILY_OFF_AMAZON_ADS_REPORT • media, Google conversion supplements, GA, Shopify, and Amazon Attribution → DTC_PERFORMANCE_REPORTDTC_PERFORMANCE_REPORT is not GA/Shopify-only: its DATA_TYPE separates
MEDIA, MEDIA_CONV, GA, SHOPIFY, and AMZ_ATTR rows. API media supplies
the base metrics, while manual data can supplement missing conversion fields.
The ad-media table is a dynamic table with a two-hour target lag; manual-upload
rows become available after the daily load, while API-backed rows do not require a
CSV upload.
What this means for an answer
Section titled “What this means for an answer”- Manual coverage is opt-in per channel. A manually supported channel has data only if its CSV was uploaded. An empty manual result usually means “not uploaded,” not “no spend.” API-backed channels do not need that CSV path.
- Manual data lags by the upload + the daily load. It is visible only after the once-daily load runs (the design targets ~00:30 KST), against whatever was submitted before then — so treat it as at least a day behind, more if uploads are irregular.
- Amazon is native; off-Amazon is mixed. API-backed channels and manual uploads have different freshness and completeness guarantees, so do not promise the same behavior for both.
All examples here use placeholders (Brand A, Campaign A) — never a real
advertiser, in either locale.