Streaming Subscription Prices by Country
Pricing
from $2.55 / 1,000 spotify plan rows
Streaming Subscription Prices by Country
Monthly Spotify and Netflix plan prices for each country you list, in local currency, with the price text as shown. A page for the wrong country is refused, not returned. Each country is charged once, plus each plan row.
Pricing
from $2.55 / 1,000 spotify plan rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Features
Share
Give a list of 2 letter country codes and get the monthly Spotify and Netflix plan prices in each country, in local currency. You get one row per plan, with the price as a number and the price text exactly as the service shows it. You pay once per country asked for, plus per plan row; a country a service does not serve, or a page that comes back for the wrong country, is one free row and carries no plan row charge.
Features
- One row per plan per country: plan, monthly price as a number, currency mark, the price text as shown, and any introductory offer.
- Spotify and Netflix, for up to 250 countries in one run.
- Every page is checked for the country it says it served. A page for another country is refused and returned as a free row, never as data for the country you asked for.
- Regular price, not the trial: when a plan shows an introductory offer,
price_amountis the price after the offer, and the offer text is inintro_offer_text.
How the data is read
Spotify: the public Premium page for each country, such as spotify.com/de/premium/, read on the Apify proxy pool. The page path picks the country, so no address in that country is needed.
Netflix: the public Netflix home page for each country, read from a residential address in that country, because Netflix picks the country from the visitor's address. The page names the country it served, and the actor checks it.
No login, no account, no API key, and no other developer's actor. A refused page is one free row and is not retried on another address. A network error on a Netflix read is retried on a new residential address in the same country, up to 3 tries in all. A Spotify network error is retried once on a new pool address.
Terms: Spotify's User Guidelines and Netflix's Terms of Use both bar automated access, and Netflix's robots.txt disallows every page for crawlers it does not name. Spotify's robots.txt does not disallow the Premium pages. The actor reads only public pages a logged out visitor sees, one page per service and country, as other Apify Store actors that read these sites do. You are responsible for how you use the data.
Changed 2026-11-08: Netflix retries a network error on up to 3 residential addresses in the same country. The Apify proxy pool is not used for Netflix. A refused page or a page for another country is never retried.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
countries | array | 2 letter country codes, such as US, DE, IN, BR, or JP. UK and GB both mean the United Kingdom. Up to 250. Each country is read once per service. | |
services | array | spotify, netflix, or both. Default both. Spotify rows cost less, because Netflix must be read from an address in each country. | |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: plan, country_summary, run_summary. run_summary is the one free row written when the input is refused. |
input | string | Service and country that produced this row. |
service | string | spotify or netflix. |
country_code | string | 2 letter country code you asked for. |
market | string | The country or market the page itself says it served. A page for another country is refused. |
plan_id | string | Spotify's own plan ID, or netflix-plan-N in the order Netflix lists its plans. |
plan_name | string | Plan name as Spotify shows it. Netflix does not name plans on this page, so it is empty for Netflix. |
price_text | string | The regular price text exactly as the page shows it, in the page language. |
price_amount | number | The regular monthly price as a number, in local currency. |
currency_mark | string | The currency symbol or code printed next to the price, such as €, $, or ₹. $ can mean US dollars or a local dollar. |
billing_period | string | month for every row. |
intro_offer_text | string | An introductory offer shown before the regular price, such as 1 month for 0 €. |
offer_type | string | Spotify's own offer ID for the plan card. |
has_ads | boolean | Netflix only: true for a plan with ads. |
source_url | string | The page read. |
row_key | string | service/country/plan, unique in a run. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"plan-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. Each country in the input is charged once, before its first read, served or not, because each read costs platform and residential usage. Country summaries and a refused input are free rows.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
plan-row, one Spotify plan in one country | $0.003 | $0.00285 | $0.0027 | $0.00255 |
netflix-plan-row, one Netflix plan in one country | $0.005 | $0.00475 | $0.0045 | $0.00425 |
country, one country asked for, served or not | $0.003 | $0.00285 | $0.0027 | $0.00255 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.009 | $0.009 | $0.009 | $0.009 |
Per 1,000 rows of plan-row: $3.00 on the free plan, $2.55 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 500 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
A Netflix plan row costs more because each Netflix country is read from a residential address in that country.
Usage examples
Console. Countries US, DE, IN, BR, JP and services spotify, netflix returns about 30 plan rows.
Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list. Countries also accept one text value with codes separated by commas, such as US, DE, IN.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-streaming-subscription-prices-by-country exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| A service has no page for a country | One free country_summary row, row_status no_results |
| A page is refused, or comes back for another country | One free country_summary row, row_status blocked, with the reason, such as wrong_country: Netflix served US |
| The maximum charge is reached | The run stops and writes one free run_summary row with row_status partial |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- Two services only: Spotify and Netflix. YouTube Premium, Apple Music, Apple TV+, and Disney+ are not read in this version.
- Prices are what a logged out visitor sees on the day of the run. They can include or exclude tax by country, as the service shows them.
currency_markis the symbol or code printed on the page.$can mean US dollars or a local dollar, and Spotify charges some countries in US dollars. The actor does not convert currencies.- Netflix does not name its plans on the page read, so Netflix rows have
plan_nameempty,has_adsset, and plans in the order Netflix lists them, cheapest first in the countries tested. - Spotify plan names come in the page language, such as Premium Bireysel in Turkey.
- Prepaid and yearly options are not returned; rows are the monthly recurring plans.
- Netflix depends on a residential address in that country. A network error is retried on up to 3 addresses; if all 3 fail, or Netflix refuses the page or serves another country, that country is a free
blockedrow, so run it again later. In 3 proof runs on 2026-11-08, Netflix read 27 of 30 countries (13 of 13, 11 of 12, and 3 of 5); India, Brazil, and Japan each failed all 3 tries once. In the first run, 7 of 13 countries read on the first address. Netflix refuses China, Russia, and Syria with HTTP 403, and North Korea and Iran have no working residential address. - A run reads about 4 seconds per Spotify country and about 8 seconds per Netflix country, so 100 countries for both services takes about 20 minutes. Set the run timeout to match.
Mamba Labs actor suite
Built by Mamba Labs.