Data and freshness
Pillars
threefold organises market evidence in three pillars:
- Brand: how an app presents itself in each storefront. Listings, charts, reviews.
- Paid: what it advertises there. Ad libraries.
- Organic: how it gets talked about. Creator posts.
Sources
| Source | Pillar | Needs | Status | Default refresh |
|---|---|---|---|---|
| App Store charts and listings (Apple's public RSS and lookup endpoints) | Brand | nothing | No key needed | weekly |
| Google Play listings and top-free charts | Brand | nothing | No key needed | weekly |
| Store reviews, App Store and Google Play | Brand | nothing | No key needed | weekly |
| Meta Ad Library (official API; ads delivered in the EU and UK) | Paid | Meta access (identity confirmation) | Waiting on Meta access | daily |
| TikTok Commercial Content API (official; EU, UK and Switzerland) | Paid | TikTok approval | Waiting on TikTok approval | weekly |
| Google Ads Transparency Center (public BigQuery dataset; EEA and Turkey) | Paid | cloud credentials | Waiting on cloud access | weekly |
| Paid in the US, Mexico, Argentina, Brazil, Japan and Korea | Paid | n/a | Links only | not collected |
| YouTube (official Data API) | Organic | API credentials | Waiting on credentials | weekly |
| Instagram brand accounts (official Graph API; the apps' own business accounts) | Organic | API credentials | Waiting on credentials | weekly |
| TikTok, X, creator posts on Instagram | Organic | n/a | Links only | not collected |
| LINE, Kakao, WhatsApp, Facebook | Organic | n/a | Links only | not collected |
While Paid and Organic sources are not connected, answers that cover them return live links to each platform's own library or search, filtered by country, instead of collected rows. A source above is "waiting" because the platform has not yet issued the access; no Paid or Organic row is collected until it is. Over REST, endpoint schemas state which sources each endpoint reads; over MCP, tool digests state coverage and gaps directly.
The library started from an App Store snapshot generated on 27 October 2026: 10 markets, 6 niches, the top 10 free apps per niche and market (360 apps), and every charting app's listing in every market (3,600 listings). Live ingest has collected on top of it since.
How fresh the data is
GET /api/meta says when each source was last collected: freshness.sources lists App Store and Google Play listings, charts and reviews, and each Paid and Organic source once it has rows, with collectedAt (null when never collected). generatedAt is the newest of them, and freshness.snapshotAt is the date of the starting snapshot. The times come from the rows themselves (when each listing was fetched, when the job that wrote the latest chart finished), so they move with every pull. Every MCP tool result carries the same times in _meta.data_freshness, and the footer of threefold.eco shows them per store.
Coverage
| Dimension | Values |
|---|---|
| Markets | gb, us, es, mx, ar, br, de, fr, jp, kr |
| Language variants | en-GB, en-US, es-ES, es-MX, es-AR, pt-BR, de-DE, fr-FR, ja-JP, ko-KR |
| Niches | games, education, health-fitness, finance, productivity, lifestyle |
| Stores | App Store (ios), Google Play (play) |
Each market carries a profile: its language variant, its market-native channels (Japan's are LINE, X and TikTok; Korea's include Kakao), and a monetisation note so a US price is not copied across. Spanish is split into es-ES, es-MX and es-AR. Mainland China storefronts are out of scope.
Missing a market, app or channel? Call request_coverage (free). Requests are counted and guide what is added next.
History
Every pull appends history rather than overwriting:
- Listings: a new row whenever the title, copy, screenshots, languages, price or icon changes (ratings excluded).
listing_historyanswers questions like “when did they localise for Japan?”. - Charts: every chart pull, by day (
chart_history). - Ads: first and last seen, times seen, and the platform's delivery dates where it gives them, so “has run for 60+ days” is measurable.
- Posts: views and likes per post per day.
Matching ads and posts to apps
Evidence, strongest first: a store link in the ad's landing URL or the post text (confidence 1); the advertiser or author is the developer or the app's own account (0.85); the app's short title is mentioned in the copy (0.65). Below 0.6 a row is kept but not attributed to an app. A search term alone never attributes: searching for an app's name returns plenty of posts that are not about it. Ads and posts are also tagged with a language variant.
Media
Ad and post images and videos live on platform CDNs that expire within hours or days. threefold's media archive copies them (deduplicated by content hash) so evidence does not turn into dead links.
Retention
| Data | Kept |
|---|---|
| Listings, charts, listing history, ads | Kept: the history is the product |
| Raw supplier payloads for ads and posts | 90 days |
| YouTube data | Refreshed or deleted after 27 days (YouTube's limit is 30) |
| Creator posts not seen again | 730 days |
| Daily post metrics | 400 days, then one row per month |
Creators can ask to be erased: their posts, metrics, archived media, store reviews and any cached analysis that cites them are deleted, and a hash of the handle is kept so they are not collected again.