The dataset behind the numbers

How the sample is defined, how every published figure is computed, where its edges are, and how to download and cite it.

CC BY 4.0New release on the 2ndAggregates only
Start here

What LuvsOne is

Search creators

LuvsOne is a creator intelligence platform. Every creator gets a page that answers one question: is this subscription worth the money? The LUVS Score, the price history, the content mix and the fan tools all exist to answer it, for anyone, without an account. Start at the home page or go straight to creator search.

Answering that question at scale produces a dataset, and this page is about the dataset. We measure the publicly visible page information of subscription creator profiles and publish it as monthly aggregates: a new release on the 2nd of each month, frozen when the month closes and never revised. It is free under CC BY 4.0, mirrored on GitHub, and readable through a public API. The live figures are on the stats page.

Methodology

How every figure is produced

Sample first, then each published measure, then the limits you should read them against.

See it on the stats page

The population

The published catalogue: the creator pages that exist on LuvsOne. It is a curated sample of the market, not a census of it, and it grows as we publish.

Active in a month

A profile counts as active in a month when its public page was observed at least once during that month. A figure is computed from the observations that exist, never from an assumption about the ones that do not.

Aggregates only

Data comes from publicly visible page information and is aggregated. We do not collect or publish personal data, and released datasets contain aggregates only.

Luvs Creator Price Index

The flagship series: what a paid subscription costs per month, listed and charged, across the sample.

Price is point in time, not averaged within the month: the last observation carrying a known price, meaning what the page cost as the month closed. Averaging within a month would invent prices that never existed. Listed and charged prices come from the same observation, so the gap between them is observed discount rather than an artefact of different denominators. A month publishes an index only when at least 100 profiles carried a price and they cover at least half of the observed sample.

  1. Free versus paid share

    Share of subscription pages that are free to follow versus paid, measured monthly.

    See it on the stats page

    A page counts as paid when a subscription price above zero was observed in the month, and as free when only a free to follow page was seen and no paid page was. Profiles whose page type could not be determined are excluded from the denominator rather than counted as free, so a month where prices were harder to observe does not read as a month when the market got cheaper.

  2. Median and price distribution

    The centre and the spread of paid subscription prices this month, in fixed bands that never move between releases.

    See it on the stats page

    Computed on paid profiles only. Deciles use linear interpolation between order statistics (R type 7, the default of numpy.percentile), so a figure recomputed from the raw data matches exactly. Band edges are fixed and never re-derived from the data, which is what keeps two releases comparable. The lowest band starts at one cent: free pages are a different kind of page, not the cheapest band.

  3. Attention concentration

    How concentrated audience attention is across creators, measured by likes. This is an engagement measure, not an income measure.

    See it on the stats page

    The Gini coefficient is computed over observed likes with the standard sorted-data formula. Profiles with no observed likes are included: zero attention is part of the distribution, not a missing observation. Top shares are the fraction of all observed likes held by the highest ranked 1% and 10%.

  4. Discount tracker

    How much of the paid market runs a promotion in the month, and how deep those promotions cut.

    See it on the stats page

    Depth is the reduction against the list price, taken from the source page’s own reported percentage where it publishes one and derived from list against current price otherwise. Median and mean are published together because depths cluster hard on half off, so the median alone hides the tail of deeper cuts. A promotion counts as long running when it has held without interruption for 90 days or more, and a single observation without it resets the clock.

  5. Price change dynamics

    Share of paid pages that changed price since last month, split by direction, among pages priced in both months.

    See it on the stats page

    Only profiles with an observed price in both months are counted. Movement is measured on the price actually charged, so entering or leaving a promotion is a price change: this publication describes what a subscription costs, not what a page advertises. The size of a move is reported among changers only.

  6. Account survival withheld

    Share of profiles first observed in a given month that are still observed active later, within our sample.

    Not published for the current population. A creator who stops posting is removed from the published catalogue automatically, so a cohort measured on it stays close to fully active by construction, and the resulting curve would describe our own visibility rules rather than creator behaviour. Any figure we ever publish here would describe observed activity within our sample, never platform-wide account closure.

  7. Price by category

    Median paid subscription price by top level category, for the latest month.

    See it on the stats page

    Categories are top level only. A category needs a minimum number of priced profiles before any figure is published for it, and one that falls below is omitted from the page and from the files entirely rather than shown with blank cells. The finer attribute taxonomy behind the top level categories is never exposed, in aggregate or otherwise.

Known limitations

The sample is curated

The published catalogue is selected, not random. It skews toward creators who are active and findable, so figures describe this sample rather than the platform as a whole, and nothing here should be read as a market total.

Observation gaps are real

A page can go unobserved in a month for reasons that have nothing to do with the creator. An empty cell always means the measure could not be computed, never that it measured zero, and a figure is never carried forward from a previous month to fill a gap.

Recent cohorts are censored

Anything measured over the life of a profile is right-censored: a profile first seen recently has had less time to be observed. This is the main reason account survival is withheld rather than estimated.

Attributes are treated as fixed

Category and country labels are applied as they stand today, including to earlier months. They change rarely, but a creator who was relabelled will appear under the current label throughout the series.

Likes are attention, not income

The concentration figures are computed over likes, which measure visibility. They say nothing about revenue, and no earnings estimate can be derived from them.

Data definitions

Every column, defined

The same definitions ship as CODEBOOK.md with the public dataset, generated from this list.

price_index.csv

ColumnTypeDefinition
monthmonthCalendar month of the release, YYYY-MM.
median_price_real_usdusdMedian price actually charged for a paid subscription. The primary price figure.
avg_price_real_usdusdMean price actually charged. Published beside the median, never instead of it.
avg_price_advertised_usdusdMean list price, computed on the same profiles as the real average so the gap between them is discount rather than a difference of denominators.
most_common_price_real_usdusdModal charged price, rounded to the cent.
price_sample_nnumberProfiles with an observed price behind that month, the sample size for every price figure in the row.
gini_likesnumberGini coefficient of the like distribution, 0 to 1. An attention measure, not an income measure.
top1_shareshareShare of all observed likes held by the top 1% of profiles ranked by likes.
top10_shareshareShare of all observed likes held by the top 10%.

free_share.csv

ColumnTypeDefinition
free_shareshareShare of classifiable pages that are free to follow.
paid_shareshareShare of classifiable pages that charge a subscription. Sums with free_share to 1.

price_bands.csv

ColumnTypeDefinition
bandstringFixed price band key: 0.01-4.99, 5-9.99, 10-14.99, 15-19.99, 20-29.99, 30-49.99, 50+. Edges never move, so releases stay comparable.
nnumberPriced profiles falling in the band that month.
shareshareBand share of all priced profiles that month.
is_modalnumber1 on the fullest band of the month, 0 otherwise.
p10 … p90usdDeciles of the charged price, by linear interpolation between order statistics (R type 7).

attention_concentration.csv

ColumnTypeDefinition
lorenz_pshareCumulative share of profiles, ascending by likes, at 21 points from 0 to 1.
lorenz_shareshareCumulative share of likes held by that fraction of profiles.

discounts.csv

ColumnTypeDefinition
pct_on_discountpercentShare of paid profiles running a promotion that month.
median_discount_depth_pctpercentMedian depth of active discounts: (regular minus promotional) over regular.
mean_discount_depth_pctpercentMean depth. Depths cluster hard on 50%, so the distance from the median is the finding.
pct_discount_over_90_dayspercentShare of active discounts that had run without interruption for 90 days or more. A gap resets the clock.

price_changes.csv

ColumnTypeDefinition
changed_shareshareShare of profiles priced in both months whose charged price moved by a cent or more.
increased_shareshareShare that moved up, on the same denominator.
decreased_shareshareShare that moved down, on the same denominator.
median_abs_change_pctpercentMedian size of the move, in percent, among changers only.
mean_abs_change_pctpercentMean size of the move, among changers only.
nnumberProfiles priced in both months, the denominator for the three shares.

survival.csv

ColumnTypeDefinition
availablenumberAlways 0 for the current population. The measurement is withheld rather than published; see Known limitations.

niche_benchmarks.csv

ColumnTypeDefinition
categorystringTop level category label. Finer attribute taxonomy is never exposed.
median_price_real_usdusdMedian charged price within the category.
avg_price_real_usdusdMean charged price within the category.
n_pricednumberPriced profiles behind the row. Rows below the minimum cell size are omitted from the file entirely.

An empty cell means the measure was not computable for that month. It never means zero.

Downloads

Take the data with you

Free under CC BY 4.0. Attribution with a link is all we ask.

The dataset on GitHub

The newest release covers July 2026 and was frozen on Aug 20, 2026.

Citation

How to cite this

For a specific figure, use the Cite this button on its section: it points at the frozen month rather than at the live page.

Read the licence
Plain citation
LuvsOne (2026). Luvs Creator Price Index. https://luvs.one/stats
BibTeX
@misc{luvsone-creator-price-index,
  title        = {Luvs Creator Price Index},
  author       = {LuvsOne},
  year         = {2026},
  howpublished = {\url{https://luvs.one/stats}},
  note         = {CC BY 4.0}
}
API

Read it from code

Read only, aggregates only, no key required, open CORS.

?release=YYYY-MM on any endpoint pins it to a frozen month. Without it you get the newest release, which rolls forward on the 2nd.

GET /api/v1/stats/free-shareOn the stats page

Free versus paid share, as a monthly series.

{
  "release": "2026-07",
  "metric": "free_vs_paid",
  "free_share": 0.2075,
  "paid_share": 0.7925,
  "series": [ { "month": "2026-07", "free_share": 0.2075, "paid_share": 0.7925 } ],
  "license": "CC-BY-4.0"
}
GET /api/v1/stats/price-bandsOn the stats page

Median, mean, deciles and the fixed price bands for one month.

{
  "release": "2026-07",
  "median": 6.66,
  "mean": 8.53,
  "deciles": [ { "p": 10, "value": 3.0 }, { "p": 90, "value": 15.0 } ],
  "bands": [ { "key": "5-9.99", "n": 118, "share": 0.3722 } ],
  "modal_band": "5-9.99"
}
GET /api/v1/stats/attention-concentrationOn the stats page

Gini over likes, top 1% and top 10% shares, the Lorenz curve, and the series.

{
  "release": "2026-07",
  "measures": "attention, not income",
  "gini": 0.6283,
  "top1_share": 0.1928,
  "top10_share": 0.5501,
  "lorenz": [ [0, 0], [0.5, 0.1266], [1, 1] ]
}
GET /api/v1/stats/discountsOn the stats page

Promotion prevalence and discount depth, median and mean, as a series.

{
  "release": "2026-07",
  "pct_on_discount": 51.42,
  "median_depth": 50,
  "mean_depth": 47.8,
  "pct_running_over_long_period": 58.9,
  "long_run_days": 90
}
GET /api/v1/stats/price-changesOn the stats page

Month over month price movement: how many moved, which way, by how much.

{
  "release": "2026-07",
  "changed_share": 0.281,
  "increased_share": 0.094,
  "decreased_share": 0.187,
  "median_abs_change_pct": 33.4,
  "mean_abs_change_pct": 38.1
}
GET /api/v1/stats/survival

Cohort survival. Returns available: false with the reason, rather than a 404.

{
  "release": "2026-07",
  "available": false,
  "curve": null,
  "notes": { "withheld": "Not published for the current population." }
}
GET /api/v1/stats/niche-benchmarksOn the stats page

Median price by top level category. Suppressed cells are omitted.

{
  "release": "2026-07",
  "minimum_n": 15,
  "niches": [
    { "slug": "fetish_focus", "label": "Fetish Focus",
      "median_real": 7.99, "avg_real": 9.39, "n_priced": 75 }
  ]
}
GET /api/v1/price-index.csv

The whole monthly series as a spreadsheet. Append-only columns.

month,median_price_real_usd,avg_price_real_usd,pct_on_discount,…
2026-07,6.66,8.53,51.42,…

Need a cut that is not published?

We prepare custom aggregate cuts for journalists and researchers, free, with the methodology attached. Tell us the question and the breakdown you need.

Request research data
Changelog

What changed, and when

A series may be extended backwards. It may not be changed quietly.

  1. Correction: the July 2026 release was recomputed

    July 2026 was originally frozen before the current metric set existed, and the metrics added afterwards were computed against a panel that had grown in the meantime. That left one release describing two different samples: its headline averages came from the original freeze, its distribution from the later computation, and the two disagreed with each other. The month has been recomputed in full, so every figure in it now comes from one calculation over one panel. The published median moved from 6.66 to 6.30 US dollars and the mean from 8.53 to 8.19, both because the sample is larger, not because the market moved. Anyone who cited the earlier figures should treat them as superseded by this release. No other month was touched.

  2. Four earlier months published for the first time

    Four calendar months that met the publication threshold but had never been released were frozen and published, so the series now carries several observations rather than one. They are new releases, not revisions: nothing already published was recomputed or overwritten. Because they were generated after the metric set was complete, every figure in them comes from a single computation over one panel. The most recent month predated that set and was reconciled separately, in the correction recorded above.

  3. Seven metric series added, and profile totals withdrawn

    Free versus paid share, the price distribution (deciles and fixed bands), price change dynamics, and mean discount depth were added to the release generator, and the existing attention and category measures were given their own anchors, definitions and citations. The new series were computed retroactively for months that were already frozen: their previously published figures are unchanged and their freeze dates were not touched, but the new columns for those months were computed against the panel as it stands today rather than as it stood then. Separately, counts of tracked and scored profiles were removed from the site, from the JSON endpoints and from the structured data. The published CSV keeps its columns so that figures already cited from it remain reproducible.

The data is the by-product. The creators are the point.

Every figure on this page came from evaluating real creator pages one at a time. That is the part you can actually use.