BEATSTORE

Docs / BeatStore WordPress Plugin

Analytics

Plays leaderboard

BeatStore → Analytics ranks published beats by play count. The page opens on 30 days. Switch the window with 7 days, 30 days, 90 days, or All time. All time uses the same lifetime numbers as the Plays column on Downloads or Products (_beatstore_plays). The shorter windows use daily counts that start from this update. They are not a backfill of older plays.

Tracks, Countries, and Downloads switch the lower half of the page. Range stays put. Tracks and Countries keep the plays summary. Downloads swaps it for free-download totals.

Search and sort in the table. Edit opens the beat. Sales reports goes to Easy Digital Downloads reports or WooCommerce Analytics, depending on which commerce plugin the site uses. Tracks hidden from the player still appear in All time. Range views only list tracks that played in that window.

The plays summary shows plays, unique listeners, and the top track for the selected window. Unique listeners are distinct visitors who started a play (hashed IP and browser).

Country data is country-level only. On each play, BeatStore resolves the request IP to an ISO country code (CDN country headers when present, otherwise a packed IPv4 range file shipped with the plugin), increments that day’s country total, and discards the IP. Raw IPs are never stored. Private and unknown addresses are skipped, except on local WordPress (WP_ENVIRONMENT_TYPE=local, BEATSTORE_DEV_UNLOCK) and the marketing Playground, where they count as US so the map can be tested. Country rows start with the next play after this feature is active; older plays are not backfilled.

Downloads uses the same 7 / 30 / 90 / All time window. Totals are free-download requests (beatstore_lead posts written when someone submits the player form): request count, unique emails, and the top track. The chart and ranked table follow that window. All time is real for these rows, unlike play range views. Recent requests show name, email, track, and date. View all opens BeatStore → Free Downloaders. Mailchimp settings stays on Integrations. 3.x beats-free-download posts are not imported.

The list caps at 200 tracks. The chart is on Tracks and Downloads and follows the same window (All time shows the last 90 days). The screen does not embed Google Analytics. That is first-party data on your site.

Editors can open the screen (edit_posts). The REST feed behind it is GET /wp-json/beatstore/v1/analytics and is not public.

Google Analytics / GTM play events

Once per track start (same moment as the play count), BeatStore sends a play event if BeatStore → Settings → Send play events is on. The Analytics screen links there as Play event settings. The Settings fields stay on Settings. They did not move onto this page.

If window.gtag already exists (Site Kit, MonsterInsights, UI Theme, or a header snippet), it sends:

gtag('event', 'play', {
  event_category: 'engagement',
  event_label: 'Track title',
  beat_id: 412
})

That matches the 3.x / UI Theme event (engagement / track title). In GA4 look under Reports → Engagement → Events → play.

If there is no gtag but Google Tag Manager is on the page, it pushes:

dataLayer.push({ event: 'beatstore_play', event_category: 'engagement', event_label: '…', beat_id: 412 })

Trigger a GTM tag on Custom Event beatstore_play.

Optional Measurement ID (G-XXXXXXXX): only if nothing else loads GA. Leave blank when Site Kit (or similar) is already on the site, or you will double pageviews.

The player also dispatches beatstore:play on <beatstore-player> (detail.id, detail.title) for themes and custom scripts.

3.x play counts still import onto _beatstore_plays. UI Theme “Send Play Events” / tracking ID import onto these settings. See Upgrading from 3.x.