Skip to content

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 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 MEDIA rows, plus GA and Shopify, arrive through the deliberate off-amazon-upload pipeline:
① 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_REPORT

DTC_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.

  • 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.