Medicare Advantage Competitive Intelligence Monitor
Pricing
from $5.00 / 1,000 competitive signals
Medicare Advantage Competitive Intelligence Monitor
Track Medicare Advantage plans, enrollment, county market share, Star Ratings and competitor changes from public CMS data. Detect plan launches, exits, growth, rating changes and geographic expansion.
Pricing
from $5.00 / 1,000 competitive signals
Rating
0.0
(0)
Developer
Kenny Ha
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
Track Medicare Advantage plans, enrollment, county market share, Star Ratings and competitor changes from public CMS data. Detect plan launches, exits, growth, rating changes and geographic expansion.
Turn public CMS Medicare Advantage data into competitor signals.
CMS publishes everything you need to understand the Medicare Advantage market — and publishes it in a form that answers nothing. The monthly county enrollment file is 3.4 million rows with no history, no market share, no rank, no carrier rollup and no comparison against last month. 94.5% of its cells are suppressed to an asterisk. This Actor does the joining, the arithmetic and the month-over-month diff, and hands you the findings.
KelseyCare Advantage Signature (HMO) · UnitedHealth Group · contract H0332-009Harris County, TX · 26,596 members · 6.499% of the county's 409,243 MA enrolleesCounty rank 1 of 160 reporting plans · 1,064 more competitors below CMS's reporting threshold
Every number above is from the live 2026-08 CMS release and hand-checked against the source files.
What does this Actor do?
It reads six public CMS files for two consecutive monthly releases, normalizes and joins them, and returns one of four views:
- Competitive signals (default) — only what changed, ranked by significance.
- Plans — one row per Medicare Advantage plan, with enrollment trend, Star Ratings and footprint.
- County market — one row per plan per county, with market share, rank and the county's competitive picture.
- Carriers — one row per parent organization, rolled up.
It also remembers what it showed you last time, so a scheduled run can return only what is new to you. On a day when CMS has published nothing new, it finishes in about seven seconds.
Who is it for?
- Medicare Advantage insurers — track competitors' enrollment, county footprint and rating movement without a data team.
- Brokers and agencies — see which plans are growing in the counties you sell in, and which carriers just entered or left.
- Healthcare consultants and strategy teams — county-level market share and rank across every US county, refreshed monthly.
- Insurtech and healthcare SaaS — a normalized MA plan and enrollment feed without building six CMS parsers.
- Healthcare investors and analysts — carrier-level share shifts and Star Rating changes as they publish.
- Provider-network teams — which plans actually have members in your counties.
- Competitive intelligence teams — a monitored feed instead of a quarterly spreadsheet exercise.
What can you monitor?
- Which Medicare Advantage plans are gaining or losing enrollment
- Which carriers are gaining or losing county market share
- Which carriers entered or exited a county's approved service area
- Which plans launched, and which disappeared
- Which contracts' Star Ratings went up or down
- Which plans are growing fastest in a given state or county
- Who dominates a county, and how many competitors sit below CMS's reporting threshold
- How a carrier's footprint is expanding across states and counties
Data sources
All public CMS files. No login, no API key, no personal or beneficiary data.
| Source | What it provides | Required |
|---|---|---|
| Monthly Enrollment by Contract/Plan/State/County | Enrollment per plan per county | Yes |
| CPSC Contract Info | Plan name, type, carrier, parent organization, SNP and employer-group flags | Yes |
| MA Contract Service Area by State/County | Which counties each contract may sell in | Yes |
| MA State/County Penetration | Official county Medicare Advantage totals — the market-share denominator | Yes |
| Part C and Part D Star Ratings (current + prior year) | Contract-level overall, Part C and Part D ratings | Optional |
| SNP Comprehensive Report | SNP subtype, specialty diseases, integration status, plan segments | Optional |
The newest available release is discovered automatically, along with the previous
comparable month. An optional source failing costs only the fields it would have
filled; it is reported in the run summary and never fabricated. Full detail,
including every column quirk, is in docs/SOURCES.md.
Signals
| Signal | Meaning |
|---|---|
NEW_PLAN | A plan appeared in CMS data |
PLAN_EXIT | A plan disappeared from CMS data |
NEW_COUNTY | A carrier added a county to a contract's approved service area |
COUNTY_EXIT | A carrier dropped a county from a contract's approved service area |
COUNTY_ENROLLMENT_START | A plan rose above CMS's county reporting threshold |
COUNTY_ENROLLMENT_STOP | A plan fell below CMS's county reporting threshold |
ENROLLMENT_GROWTH / ENROLLMENT_DECLINE | Enrollment moved past both your thresholds |
MARKET_SHARE_GAIN / MARKET_SHARE_LOSS | County or national share moved, in percentage points |
STAR_RATING_UP / STAR_RATING_DOWN | A contract's overall Star Rating changed |
Two of these are deliberately split apart. CMS measures "which counties a
contract may sell in" and "does this plan have more than 10 members here" in two
different files. Only the first is a market event, so it gets NEW_COUNTY /
COUNTY_EXIT. A plan crossing the reporting threshold — 10 members to 11, or 11
back to 10 — gets COUNTY_ENROLLMENT_START / STOP instead. Calling a threshold
crossing a county exit would tell you something the data does not say.
Each signal carries a signalScore from 0 to 100 so you can sort by
significance. It is a deterministic formula over the size of the enrollment move,
the market-share shift, the rating change and the kind of event — no model, no
AI, fully documented in docs/METHODOLOGY.md. It ranks what deserves attention;
it does not predict business outcomes.
Enrollment trends
enrollmentChange and enrollmentChangePercent compare the current CMS month
against the previous one. Both are withheld, with enrollmentComparable: false,
when either month's cell was suppressed — a plan could have moved from 1 to 200
or from 10 to 200 behind the same asterisk, and no honest delta exists.
A suppressed value is null, never 0. CMS suppresses any county cell with
10 or fewer members: 3,204,775 of 3,390,880 rows in the 2026-08 file. Treating
those as zero would fabricate 3.2 million facts.
County-level market intelligence
County market share divides plan enrollment by CMS's official county Medicare Advantage total, not by a sum of the visible plan rows. With 94.5% of rows suppressed, summing what is visible undercounts a county by up to 10 members per hidden plan — in Harris County, Texas, 1,064 sub-threshold plans sit alongside the 160 that report, against an official total of 409,243. Each county row also carries:
countyVisibleEnrollment— the sum that is visible, so the gap is inspectablecountySuppressedPlanCount— how many competitors are present but below the thresholdcountyRank,previousCountyRank,rankChange— position among reporting plansmarketShareChangePp— movement in percentage points, not percentcountyPenetrationPercent— how much of the county's Medicare population is in MAinServiceArea— whether the contract is approved to sell there
Star Ratings
Contract-level overall, Part C and Part D ratings for the current rating year, compared against the prior year. Ratings are published annually, so a rating signal fires once — on the run that first sees a new rating year — and once per contract, not once per plan. The rating values stay on every plan and county row on every run.
Contracts with no rating keep null. "Not rated" is a category — a plan too new
to be measured — not a low score, and no rating filter removes those rows.
Input examples
Every example below has been run against live CMS data.
Latest competitive signals, nationwide — the default:
{ "outputMode": "signals" }
Monitor one carrier:
{ "outputMode": "signals", "organizations": ["Humana"], "stateStoreName": "humana-monitor" }
Texas county market:
{ "outputMode": "county-market", "states": ["TX"] }
Star Rating changes only:
{ "outputMode": "signals", "signalTypes": ["STAR_RATING_UP", "STAR_RATING_DOWN"] }
Enrollment growth above 20%, meaningful plans only:
{"outputMode": "signals","signalTypes": ["ENROLLMENT_GROWTH"],"minEnrollmentChangePercent": 20,"minEnrollmentChangeAbsolute": 100}
Special Needs Plans, 4 stars and up:
{ "outputMode": "plans", "snpOnly": true, "minStarRating": 4 }
Carrier league table:
{ "outputMode": "carriers" }
Output examples
A signal row, from a real 2026-08 production run:
{"recordKind": "signal","signalType": "ENROLLMENT_GROWTH","signalGrain": "plan","signalScore": 40.1,"headline": "SCAN Strive (HMO C-SNP) (H1822-006) grew +23.18% to 1185 members","contractId": "H1822","planId": "006","planName": "SCAN Strive (HMO C-SNP)","planType": "HMO","organizationName": "SCAN DESERT HEALTH PLAN, INC.","parentOrganization": "SCAN Group","stateCode": "AZ","currentEnrollment": 1185,"previousEnrollment": 962,"enrollmentChange": 223,"enrollmentChangePercent": 23.18,"starRating": 4.5,"previousStarRating": 3.5,"starRatingChange": 1,"dataPeriod": "2026-08","previousDataPeriod": "2026-07","monitoringChangeType": "NEW"}
A county-market row:
{"recordKind": "county-market","contractId": "H0332","planId": "009","planName": "KelseyCare Advantage Signature (HMO)","organizationName": "KS PLAN ADMINISTRATORS, LLC","parentOrganization": "UnitedHealth Group, Inc.","stateCode": "TX","county": "Harris","countyFips": "48201","currentEnrollment": 26596,"previousEnrollment": 26583,"enrollmentChange": 13,"enrollmentComparable": true,"countyTotalMaEnrollment": 409243,"countyVisibleEnrollment": 408469,"countySuppressedPlanCount": 1064,"marketSharePercent": 6.499,"countyRank": 1,"rankChange": 0,"inServiceArea": true,"dataPeriod": "2026-08"}
Each run also writes a RUN_SUMMARY record to the key-value store with the
periods compared, per-source health, signal counts by type, and exactly what was
charged.
Dataset views
Four views, one per output mode: Competitive signals, Plans, County market and Carriers. Each puts the business fields first and the technical metadata last, so any of them exports cleanly to CSV or Excel on its own.
Scheduling
Point a monthly schedule at it and leave it. CMS publishes a month around the 7th–14th, so a schedule on the 15th will normally catch each new release.
Daily is also fine and costs almost nothing: skipWhenNoNewCmsPeriod is on by
default, so a run that finds nothing new finishes in about seven seconds and
charges only the Actor start fee. Changing any filter counts as a different
question and always runs in full.
Use a distinct stateStoreName per monitor, and set deltaMode to
changes-only or new-only for an alerting feed.
Pricing
Pay-per-event, with tiered discounts for higher Apify plans. Measured on real runs against the 2026-08 release:
| Run | Rows | Cost (FREE tier) |
|---|---|---|
| Competitive signals, nationwide, first run | 290 | $2.95 |
| Carriers, nationwide | 166 | $0.06 |
| Plans, nationwide | 6,458 | $0.37 |
| County market, one state (Texas) | 8,028 | $0.45 |
| County market, nationwide | 120,475 | $6.07 |
| Scheduled run, no new CMS release | 0 | $0.05 |
| Monthly signals monitor, quiet month | ~33 | ~$0.38 |
Unchanged rows and findings you have already been given are never charged, which is what makes recurring monitoring cheap. A first run against a new monitoring name is billed at a reduced baseline rate.
A nationwide county-market run is the one large one — 120,475 rows. Set a cost
limit on the run if you want a hard ceiling, or filter to the states you care
about. Full breakdown in docs/MONETIZATION.md.
API
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('huykenny/medicare-advantage-competitive-intelligence').call({ outputMode: 'signals', organizations: ['Humana'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("huykenny/medicare-advantage-competitive-intelligence").call(run_input={"outputMode": "signals", "states": ["TX"]})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Output formats
JSON, JSON Lines, CSV, Excel, XML, RSS — via the Apify dataset API or the Console. Every view exports independently.
Integrations
Anything Apify connects to: Google Sheets, Slack, webhooks, Zapier, Make, or your own service polling the dataset API.
Reliability
- The newest CMS release is discovered rather than assumed, and the two months CMS never published (2019-11 and 2023-07) are skipped automatically.
- Sources are split into required and optional. An optional source failing degrades the output explicitly and is recorded in the run summary; it never fabricates a value and never fails the run.
- Nothing claims a disappearance unless the download was complete, the run was unfiltered, the two periods are adjacent and row counts clear a completeness floor. Details under Limitations.
- The 170 MB enrollment file is streamed, never buffered. Peak memory on a nationwide run is about 550 MB.
- 176 unit tests plus a live suite that asserts the CMS file shapes this Actor depends on.
Limitations
Honest ones, all of them consequences of what CMS publishes.
- 94.5% of county enrollment cells are suppressed. CMS withholds any cell
with 10 or fewer members. Those plans are present in a county but their size is
unknowable, so enrollment is
nulland no delta is computed. County market share therefore covers reporting plans only, against the correct official denominator. - No plan segments in enrollment data. CMS publishes
SEGMENT_IDonly in the SNP Comprehensive Report. Plan identity is contract + plan; segments appear as asegmentIdsarray. Segment-level enrollment does not exist publicly. - Service area is contract-level, not plan-level.
NEW_COUNTYandCOUNTY_EXITare therefore contract facts. CMS does not publish a plan-by-county approved service area. - Star Ratings are annual and contract-level. They cannot be attributed to an individual plan, and a rating change is news once a year.
- Carrier totals include employer-group Medicare Advantage, because the CMS
enrollment file does not separate it. Use the plan-level
isEghpflag to isolate the individual market. - No premiums or benefit detail. Those are not in this CMS dataset family.
- Mid-year months are quiet. Plan rosters and service areas change at the annual boundary, so most launches, exits and footprint changes land between October and January.
nationalMarketSharePercentis share of observed enrollment, not of the true national total, which suppressed data makes unknowable.- Standalone Part D, PACE and Cost plans are excluded by default. They share
these CMS files but are different markets; set
planUniverse: "all"to include them.
Data methodology
Every derived figure — enrollment deltas, market share, rank, carrier rollups,
the signal score and the removal-safety rules — is specified in
docs/METHODOLOGY.md, including the exact formulas and what each one does not
claim.
Disclaimer
This is an independent, community-built Actor. It is not affiliated with, endorsed by, or sponsored by the Centers for Medicare & Medicaid Services, Medicare, the U.S. Department of Health and Human Services, or any health insurance company.
All data is derived from publicly available CMS datasets and is intended for research, analytics and competitive intelligence. Figures are only as current and as complete as the CMS files they come from, and CMS suppresses small counts by design.
This Actor does not provide insurance, medical, legal or financial advice. It processes aggregate plan-level data only and collects no beneficiary names, addresses, Medicare numbers, patient records, health records or claims.
Support
Open an issue on the Actor's Apify page. When reporting a data problem, include the run ID — the run summary records which CMS files were used, which sources succeeded and which periods were compared, which is usually enough to pinpoint it.