Publishing principles
How PanelCompare ranks SMM panels
Every number below is rendered from src/lib/scoring.ts, the same file the ranking pipeline runs. The page cannot drift from the formula, because it is calling it.
Last updated by The PanelCompare editorial team
How the default list is ordered
One question sits above the score, and it is the only one that does: who is behind the listing, and what they have actually done to stand behind it. That gives the default list three tiers, in this order. Within each tier the order is the overall score, exactly as the formula above computes it.
- 1.The owner proved the domain. A claim is a DNS record only the operator of the domain can publish, so it is the one signal on this site that cannot be produced by a panel talking about itself. It puts a named, reachable operator behind the listing: someone who can be held to a reply, who answers complaints on the record, and who loses something real if the panel misbehaves.
- 2.The owner asked to be listed, and we accepted. This one is weaker, and it is not going to be dressed up as the one above it: nobody has proved control of anything, and it is not a verification. What it is evidence of is that somebody came forward — an operator who wrote to us at an address that worked, agreed to be measured, and cannot be surprised by the result — and, since the onboarding wizard replaced the old form, that they held a working API key and let us prove it against the panel’s own API. A panel we found while crawling the market agreed to nothing and may not know this site exists.
- 3.Everyone else. Most of the index, and no reflection on them. Nothing has been held against a panel here. We simply have nobody on the other end of it, which is a fact about our contact with the panel rather than about the panel.
A high score says a panel is cheap and up. The two tiers above it say there is somebody there, and how much that somebody has actually put their name to. Those are different questions, and a buyer about to send money is entitled to have the second one answered first.
Both tiers are free, both are open to every panel in the index on identical terms, and there is no paid equivalent of either — now or ever. A panel cannot buy either position any more than it can buy a score. Verifying is one TXT record and about two minutes, from the panel’s own page; the second tier is what listing a panel earns once an editor accepts it.
The second tier is new, as of today. Until today there were two — verified, then everyone — and this page said so. That put a panel whose operator had written in, answered our questions and handed over a working API key in exactly the same place as one we had scraped off a forum, which understated what we knew about the first. Nobody had to do anything to get the new tier, and nobody was asked to: the column was backfilled from the submissions we had already accepted, so an operator who wrote in months ago has it today without lifting a finger. What it does not do is move anyone past a verified owner, and it does not turn into a verification by sitting next to one — proving the domain is the tier above, and it stays there.
The rule applies to the default ranking only. The cheapest, highest uptime, most services, newest and best rated sorts each promise one specific ordering and are left strictly on it — a list headed “cheapest first” that is not cheapest first would be worse than no sort at all. Filtering and every price table are untouched by it.
Does paying PanelCompare change a panel’s position?
No. Affiliate status, sponsorship and paid placement appear nowhere in the ranking formula, and this is checkable rather than assertable: the whole formula is one file, and it contains no field describing a commercial relationship. The database does carry an is_affiliate flag and an is_sponsored flag: the first decides whether an outbound link carries rel="sponsored" and a visible partner tag, the second marks a panel that pays for a row pinned above position one, labelled Sponsored and never numbered. Neither is read by the scoring code.
What we can be paid for is listed on the disclosure page, including which specific outbound links are monetised today.
What goes into the overall score?
Five components, weighted. Price and trust carry 60% between them because those are the two questions a buyer is actually asking: can I afford it, and will it deliver. Support carries the least because a chat widget is easy to install and hard to verify. The weights below are read from the exported OVERALL_WEIGHTS constant at render time.
| Component | Weight | Scale | What it measures |
|---|---|---|---|
| Price | 30% | 0–10 | Median of this panel’s per-service price ratios against the market median for each service. |
| Trust | 30% | 0–100, rescaled over its 85-point base to 0–10 | The itemised trust score below. Every input is an observation, not an opinion. It enters this average divided by 8.5 rather than by 10, because 85 — not 100 — is full marks on the components trust is averaged over. That sends the trust midpoint of 42.5 to the neutral 5 that every other component here uses. |
| Features | 18% | 0–10 | Capability flags weighted by what it costs a buyer when each one is missing, plus catalogue breadth. |
| Reliability | 14% | 0–10 | Uptime over the last 30 days, with response time as a tiebreaker. |
| Support | 8% | 0–10 | Published channels — a ticket system, a live-chat widget, and a role mailbox on the panel’s own domain — overridden by buyer ratings of support wherever we have at least three. |
| Total | 100% | ||
Source: OVERALL_WEIGHTS in src/lib/scoring.ts, read at build time. The headline score is rounded to one decimal place.
How is the trust score calculated?
Trust is an average over 5 components worth 85 points between them, plus up to 15 points of verification bonus, minus a penalty for published complaints. The weights answer one question: how much would it cost an adversary to fake this signal? Domain age and a completed test purchase are expensive to fake. A TLS certificate is free, so it is worth nothing here and is not a component at all.
It is an average over the components we measured, not over all of them. A component with no observation behind it — a panel we have not probed, one with no verified reviews yet — is dropped from both the points earned and the points available. It does not score zero, and it is not filled in at a neutral half either.
| Component | Max | What is measured | Why it is weighted this way |
|---|---|---|---|
| Domain age | 20 | Registration date from RDAP/WHOIS, scored on a square-root curve that reaches full marks at five years. | Age cannot be bought retroactively, so it is the strongest defence against a panel that exits and reopens under a new name, and it exposes a “since 2014” footer on a domain registered last year. |
| Uptime, last 30 days | 25 | Successful HTTP and API probes as a share of all probes over the last 30 days, Laplace-smoothed — one imaginary success and one imaginary failure are added to the sample before the rate is squared and scaled. | It is the only component we generate continuously ourselves, and a collapse in availability is the earliest observable signal of a provider failure or an exit. The smoothing bounds a thin run from both sides: five successes out of five earn 18.4 of 25 rather than full marks, and none out of five earn 0.5. The blend this replaced paid those 16.9 and 8.1 respectively — it rewarded a small sample for failing and punished one for succeeding, which is the ordering inverted. |
| Catalogue freshness | 10 | How recently this panel’s catalogue synced successfully into our index. A panel we have never synced is not scored here at all: that is a missing API key on our side, not staleness on theirs, so it costs coverage instead. | A catalogue we cannot re-read is a catalogue whose prices we cannot stand behind, so observed staleness costs points even when the panel itself is fine. Absence of any sync no longer does. Until today it did, at a flat −10 against 127 of the 129 panels in the index — a figure that described our key ring rather than any panel in it. |
| Verified buyer reviews | 20 | Mean star rating over the panel’s verified-buyer reviews — the approved reviews where a moderator also saw proof of purchase — shrunk toward the index-wide verified mean by pooling 8 imaginary reviews at that prior with the panel’s own. The prior is 3.0/5 until the index holds enough verified reviews to estimate one. Below 3 verified reviews the component is not scored at all. This is a narrower set than the star rating on a panel’s page, which counts every approved review, verified or not: the badge decides whether a review reaches this 20-of-85 component, not whether it counts as a review. | 1★ maps to 0, the prior to half the 20 points, 5★ to all of them — so buyers can move a panel down as well as up, which the previous formula could not do. That one multiplied quality by a volume term and was floored at zero: two hundred verified one-star reviews still earned 9 of 20, leaving the worst-reviewed panel we could describe within two points of one nobody had ever reviewed. Verified only, because this component is the one a panel can write for itself: an unverified review costs nothing to fabricate and moves the public star rating, where a reader can see the badge is missing; moving up to 20 of 85 weighted trust points should cost a real order. |
| Verification | 15 | Ten points where we placed a real order and it delivered; five where the owner proved control of the domain. | A completed test purchase is the only signal here we generate ourselves against a panel that has an incentive to look good, which is why it carries the most weight in this component. Added as a bonus rather than averaged in: whether we have got round to test-ordering from a panel is a fact about our workload, and a panel should not be marked down for our backlog. |
| Published policies | 10 | Published terms (3), a published refund policy (4) and a reachable support channel (3). | Cheap to satisfy and cheap to fake, so it is worth little, but a panel with no published terms and no reachable support has told you something. |
| Averaged over | 85 | Verification sits outside this total: it adds points without diluting them, so not having bought from a panel ourselves never counts against the panel. | |
Source: component maxima read from computeTrust() in src/lib/scoring.ts at build time.
What does a published complaint cost a panel?
The penalty is applied after the component sum, so it can pull a panel below any score its other signals earned. Every complaint a moderator has published counts. A report leaves the count only when a moderator moves it to disputed or resolved, which is a judgement a person makes about a specific account.
An owner’s reply does not do it. A verified owner can answer any report on the record and the reply is published unedited beside it, but it moves no points on its own — because wiring the penalty to the reply field would make this the one place on the site where a panel edits its own score by typing into a box. Whether an answer is actually an answer is a call for a moderator, and disputed is where that call is recorded. This page previously said the opposite — that a report the owner had answered stopped counting — and that was never what the code did.
What does change the weight is evidence. A report a moderator saw proof for — an order ID, a transaction hash, a screenshot with a visible timestamp — counts in full; one they judged credible and specific but could not verify counts 0.4 of a report. Not zero, because the buyer with the strongest case is often the one left holding nothing but a login that stopped working. The curve is logarithmic and capped, because the tenth complaint tells you far less than the first.
| Published complaints | All evidenced | None evidenced |
|---|---|---|
| 1 | −12.0 | −7.9 |
| 2 | −16.7 | −10.8 |
| 3 | −20.0 | −13.1 |
| 5 | −24.7 | −16.7 |
| 10 | −31.7 | −22.6 |
| 25 | −35.0 | −31.7 |
Source: computeTrust() evaluated at each complaint count, with every report evidenced and with none of them. The deduction is capped at 35 points. Where a panel is carrying one, the exact figure and the reports behind it are itemised on that panel’s own trust page.
What happens when we have not measured something?
It leaves the average, and it lowers coverage instead — the share of the 85 weighted points we actually hold evidence for. Coverage is published next to every trust score on this site and returned by the API, because a 70 built on five components and a 70 built on two are different claims and only one number cannot say which you are looking at.
This replaced an earlier design that filled every gap with a neutral half-share. That sounds like the cautious choice and is not, for a reason worth stating plainly: the filler is the same constant for every panel, so the more of the scale it occupies, the harder every panel is pulled onto the same figure. At the point we noticed, 60 of the 100 points were the same for almost every panel in the index — uptime, reviews and verification were all unmeasured across the board — and four values covered nine listings in ten. The score had stopped describing panels and started describing our own coverage, while still printing as a confident number out of a hundred.
Renormalising has the opposite failure mode: with one component measured, that component becomes the whole score. So below 50% coverage the result is pulled back toward the midpoint in proportion to how far short it falls, and a panel whose single measured component happens to be full marks cannot present as a panel we have checked.
A second, lower floor decides something different: whether we will put a word on the score. Below 30% coverage no band name is awarded — the panel reads provisional, and the figure carries a dotted underline wherever it appears. “Established” is a claim about a panel, and one lucky observation does not entitle us to make it: the heaviest single component is worth 25 of 85, or 29%, so nothing on its own clears this floor.
These were one constant at 50% until today, and the page said so. That was wrong twice over. They answer different questions — “how sure are we of this number?” and “is there enough here to say a word out loud?” — and tying them together made the band floor unreachable: everything we can learn about a panel without an API key or a run of probes sums to 40 of 85, which is under half. So 128 of the 129 panels in the index were labelled provisional, the best of them scoring 72.5, and a caveat that applies to ninety-nine listings in a hundred carries no information about any of them. Between 30% and 50% a panel is now banded and still discounted, and the coverage figure that rides next to the band everywhere it appears is what tells you which of those you are reading.
What do the trust bands mean?
The bands are defined once, in trustBand(), and are the same everywhere they appear: 80 and above is high trust, 62–79 established, 42–61 limited history, below 42 unproven. A new panel is unproven by construction, and that is a statement about our evidence rather than about the panel.
How is the price score calculated?
For every service a panel actually sells, we take its price as a ratio of the market median for that same canonical service, then take the median of those ratios. A ratio of 0.5 (half the market) scores 10. A ratio of 1.0 scores 5. A ratio of 2.0 scores 0. The score is computed only where a panel competes, so a narrow catalogue is neither rewarded nor punished for the services it does not carry.
| Median ratio to market | Reads as | Price score |
|---|---|---|
| 0.40× | 60% below the market median | 10.0 |
| 0.50× | 50% below the market median | 10.0 |
| 0.75× | 25% below the market median | 7.1 |
| 1.00× | At the market median | 5.0 |
| 1.50× | 50% above the market median | 2.1 |
| 2.00× | 100% above the market median | 0.0 |
Source: computePriceScore() evaluated against a synthetic three-service catalogue at each ratio.
Why the median of ratios rather than a comparison of averages?
Because comparing average prices measures a catalogue’s composition rather than its pricing. A panel that lists only the two cheapest categories on the market (Instagram likes and TikTok views, both priced in fractions of a cent) has a low average price and tells you nothing about what its followers or watch hours cost. Taking each service as a ratio against that service’s own market median removes the composition entirely: every row is compared only with its like, and the median of those ratios is unmoved by one outlier row.
This matters more here than in most markets, because several of these markets are bimodal. YouTube subscribers have a bot tier at $0.02–$0.72 that describes itself as high-drop with no refill, and a real refill-guaranteed tier clearing near $14.40, with nothing meaningful in between (PanelCompare domain research, 6 September 2026). A mean across those two tiers describes nothing anyone can buy.
Two guards sit on the calculation. Ratios outside 0.02× and 20× are dropped as data errors or bespoke services rather than price signals: a service priced at a hundred times the market is usually a different product wearing the same name. And a panel with fewer than three comparable services scores a neutral 5 rather than a flattering 10, because three rows are not a price policy.
How are features, reliability and support scored?
Feature weights reflect what it costs a buyer when a capability is missing, not how impressive it sounds. A refill guarantee protects the purchase itself; an auto-subscription saves clicks. The weights below are measured by flipping one flag at a time against a zeroed input set and reading the difference, so they are the code’s weights rather than a description of them.
| Capability | Points | Why |
|---|---|---|
| Refill guarantee | 1.60 | The only durability promise with a mechanism behind it. |
| Public API | 1.30 | Required for automation, and independently verifiable. |
| Drip-feed | 1.20 | Pacing control on large orders. |
| Cancel button | 1.10 | The only post-order control a buyer has. |
| Geo-targeting | 0.90 | The largest price driver in any catalogue. |
| Child panels | 0.80 | Matters to resellers, not to end buyers. |
| Mass order | 0.60 | Bulk submission without the API. |
| Subscriptions | 0.50 | Convenience, not protection. |
| Free balance | 0.50 | Lets a buyer test delivery before depositing. |
| Catalogue size (full marks at 10,000 services) | 0.70 | Log-scaled: the step from 50 to 500 services matters, the step from 5,000 to 50,000 does not. |
| Payment methods (full marks at 8 or more) | 0.40 | Rail diversity is a recovery path, not a convenience. |
| Platforms covered (full marks at 15 or more) | 0.40 | Breadth of supply relationships, inferred from the synced catalogue. |
| Refill window bonus | 0.30 / 0.45 / 0.50 | At 30d / 90d / 365d. The curve flattens hard past 90 days because long and lifetime windows are frequently unhonoured in practice. |
Source: computeFeatureScore() evaluated one flag at a time. The final score is clamped to 10, so a panel with every capability does not exceed the scale.
What does uptime score?
Uptime is squared before scaling, which makes the difference between 99% and 95% much larger than the difference between 80% and 76%, because at the top of the range availability is the product, and at the bottom the panel is already unusable. Response time is a tiebreaker worth 1.5 points at most: a panel that is up but slow still takes your order. Below five probes in 30 days we do not score the component at all.
| 30-day uptime | Reliability score |
|---|---|
| 100% | 9.85 |
| 99% | 9.68 |
| 95% | 9.02 |
| 90% | 8.24 |
| 80% | 6.79 |
Source: computeReliabilityScore() at 60 probes and an 800 ms average response.
What does support score?
Published channels set a floor, and buyer ratings override it. Where at least three of the approved reviews that make up a panel’s star rating have rated support directly, that evidence is worth 65% of the component and the presence of a chat widget only 35%, because a widget is a purchase and a response is a behaviour. The verified-buyer badge does not gate this: it gates the trust score’s review component, described above, and nothing else.
| Support setup | Score |
|---|---|
| No published channel | 3.50 |
| Ticket system only | 5.50 |
| Live chat only | 6.00 |
| A published support mailbox, and no chat widget | 6.00 |
| Both channels | 8.00 |
| All three channels | 8.50 |
| All three, and buyers rate support 4.5/5 | 8.66 |
Source: computeSupportScore() at each combination.
What does the arithmetic look like on a real panel?
The example below is whichever panel currently ranks first, chosen by the ranking itself rather than by us, and every figure is read live from the index. Its five part scores go into the weighted sum; the result is the number shown on Smm resellers Hub’s page.
- Panel
- Smm resellers Hub
- Trust
- 89.2 / 100
- Overall
- 8.7 / 10
smmresellershub.com
High trust
Recomputed here: 8.7 · 100% evidence
Step 1: the itemised trust score
| Component | Points | Max | What we observed |
|---|---|---|---|
| Domain age | 0.0 | 20 | WHOIS lookup pending. Left out of the average until we have a date. |
| Uptime, last 30 days | 24.6 | 25 | 100.0% of 113 checks succeeded. |
| Catalogue freshness | 10.0 | 10 | Prices synced within the last 24 hours. |
| Verified buyer reviews | 0.0 | 20 | No verified reviews yet. Unreviewed is not the same as badly reviewed, so this is left out of the average and counted against coverage instead. |
| Verification | 5.0 | 15 | Verified: owner verified control of the domain. |
| Published policies | 10.0 | 10 | Terms, refund policy and a reachable support channel are all published. |
| Trust score | 89.2 | 100 |
Source: the stored trust_breakdown for smmresellershub.com, written by the same computeTrust() whose maxima are tabulated above. Last updated Oct 22, 2026.
Step 2: the price score, and what an average would have said instead
Smm resellers Hub has 58 services we can compare against a market median. The median of its per-service ratios is 0.788×, which scores 6.7 out of 10.
| Method | Ratio to market | Would score |
|---|---|---|
| Median of per-service ratios (what we use) | 0.788× | 6.7 |
| Mean panel price ÷ mean market median (the naive comparison) | 1.113× | 4.2 |
Both rows use the same 556 comparable services. The mean panel price is $5.03 per 1,000 against a mean market median of $4.52, figures that a handful of expensive geo-targeted rows can move on their own, which is precisely the distortion the median removes.
Step 3: the weighted average, over what was measured
A component with no observation behind it is dropped from both sides of this average rather than entered at a neutral 5. The weights of the ones that remain are what the score is divided by, so the figure is an average of what we know instead of a blend of what we know and a constant.
| Component | Score | Weight | Contribution |
|---|---|---|---|
| Price against the market | 6.70 | 30% | 2.010 |
| Trust | 10.00 | 30% | 3.000 |
| Feature coverage | 9.80 | 18% | 1.764 |
| Uptime | 10.00 | 14% | 1.400 |
| Support | 6.80 | 8% | 0.544 |
| Divided by the measured weight | 100% | 8.7 |
The trust row is the one that needs a word of arithmetic. Smm resellers Hub’s published trust score is 89.2 out of 100, and it enters this table at 10.00 — divided by 8.5, not by 10. 85 rather than 100 is full marks on the 5 components trust is averaged over; the other 15 are the verification bonus, which sits outside that average and is clamped at the top of the scale here. Dividing by 10 would enter the trust midpoint of 42.5 at 4.25 against a scale whose neutral is 5, so every panel we knew nothing about would carry three quarters of a point of pessimism on 30% of its headline for no evidential reason at all. Rescaled this way, a panel with almost no trust evidence — whose trust score has been discounted all the way back to that midpoint — arrives here at 5.0, the same neutral every other component on this page sits at when we have not measured it.
Source: the stored component breakdown for smmresellershub.com, run back through computeOverall() on this page. The stored headline is 8.7; if these two numbers ever disagree, the index is stale and that is a bug worth reporting.
What happens to a panel we have not measured yet?
Missing data lowers confidence, not the score. Where we have no observation for a component, it leaves the average entirely — it is not scored zero, and it is not filled in at a neutral half — and the panel’s coverage figure falls instead. Punishing an unknown would make the ranking track how long we have been watching a panel rather than how good the panel is, which would quietly favour incumbents and disadvantage every new entrant.
Filling the gap in with a constant, which is what this site used to do, turns out to be the same mistake wearing the opposite coat. The filler is identical for every panel, so the more of the scale it covers the harder every panel is pulled onto one number — and a ranking in which nobody can be moved down is a ranking in which nobody can be moved up either.
One component used to deviate, and it was a mistake rather than a design. A panel we had never synced scored a hard zero out of 10 on catalogue freshness and stayed inside the denominator, on the reasoning that hand-entered prices are worth saying out loud in the score.
What that measured was our own key ring. When this was written we held API keys for 2 of the 129 panels in the index — it is 13 of 134 today — so almost every listing was being docked the full 10 points of an 85-point base — worth roughly ten points of trust once the average is renormalised — for a key we did not have. It was the largest single source of pessimism in the index, it was applied almost uniformly so it moved nobody relative to anybody, and it was precisely the rule this section says we do not follow: a component we have not measured, scored zero instead of dropped. Never-synced is now unmeasured. It costs coverage rather than points, and the row on the panel’s own page says in full that the prices there are hand-entered.
Staleness we can actually see still costs, and that branch is untouched: a catalogue that answered last month and does not answer today is an observation about the panel. The distinction is the same one we draw between a capability flag that is null and one that is false.
Thin samples are pulled toward neutral rather than treated as certainty. Three successful probes is not evidence of reliability, so the uptime component is Laplace-smoothed — one imaginary success and one imaginary failure added to the sample — and only scored at all above five probes in 30 days.
What does this score not measure?
Stating the gaps is part of the methodology, because a score that implies more than it measures is worse than no score. These are the things we do not currently know, and would have to build a measurement programme to learn.
- Whether refills are actually honoured. We score the advertised refill window, not observed honouring. Measuring the real thing needs a test-order programme or structured dispute intake, and until it exists the refill-window figures we publish are labelled as an industry estimate.
- Real drop rates and delivery times. Advertised start-time bands are averages a panel computes itself from recent orders, and they are frequently gamed. We record them as claims, not measurements.
- Delivered quality. No comparison site can inspect the accounts a panel sends. Quality tiers in our data are the panel’s own labels, normalised but not verified.
- Common ownership, in full. We can infer clone pairs from shared copy, assets, registrant data and payment endpoints, and we disclose what we find, but an operator who separates those signals properly will not be detected.
When does a score change?
When an observation changes. Scores are never edited by hand, and there is no override field in the schema for a human to reach for. What varies is how quickly a change reaches the page, which is set by each route’s revalidation window.
| Page type | Refreshes at most every |
|---|---|
| Price tables and service pages | 30 minutes |
| Panel profiles and best-of lists | 6 hours |
| Editorial pages, including this one | 1 day |
| Legal and policy pages | 7 days |
Source: the REVALIDATE constants in src/lib/site.config.ts.
Questions about the formula
Can a panel pay to rank higher on PanelCompare?
No. The ranking formula lives in one file, src/lib/scoring.ts, and it takes no input describing affiliate status, sponsorship or payment. A panel can pay to be shown first: a sponsored panel is pinned above position one, labelled Sponsored and unnumbered, and the numbered ranking beneath it is exactly what the formula produced.
Why is a lower-scoring panel listed above a higher-scoring one?
Because of who is behind it. The default list has three tiers and orders by score within each of them: panels whose owner has proved control of the domain by DNS, then panels whose operator asked us to list them and was accepted, then everyone else. The first is the one signal on this site a panel cannot manufacture by describing itself — a DNS record only the domain operator can publish — and it means there is a named owner who answers complaints on the record. The second is weaker on purpose and is not a verification: nobody has proved control of anything, only that a real operator came forward at an address that worked, agreed to be measured, and let us prove an API key against their own panel. A panel we found by crawling the market agreed to nothing and may not know this site exists. Both tiers are free, both are open to every panel on identical terms, and there is no paid equivalent of either. The cheapest, uptime, services, newest and rating sorts ignore all of it and stay strictly on the criterion they name.
What happens to a panel we have not measured yet?
Missing data lowers confidence, not the score. A component with no observation behind it is dropped from the average — not scored zero, and not filled in at a neutral half — and lowers the panel’s published coverage figure instead. Two separate floors then apply, and they are separate on purpose. Below 50% coverage the score is pulled back toward the midpoint in proportion to the shortfall, so one lucky component cannot present as a checked panel. Below 30% coverage no band name is awarded at all and the score reads as provisional. Punishing an unknown would make the ranking track how long we have been watching a panel; filling it in with a constant would pull every panel onto the same number, which is the failure this replaced.
Why is the price score a median of ratios rather than a comparison of average prices?
Because averaging lets a panel score well by listing only the two cheapest categories on the market. Taking each service as a ratio to that service’s market median, then taking the median of those ratios, measures a panel only where it actually competes. Where a panel sells one service at several quality tiers, those rows are medianed into a single figure for that service first: one service, one vote. Without that step a panel listing 141 rows on Instagram followers and one row on everything else had its biggest seller outvote the rest of its catalogue 141 times, which measured how it tiers rather than what it charges.
How often do scores change?
Price tables revalidate at most every 30 minutes, panel profiles every 6 hours, and this page every 1 day. A score moves when an underlying observation moves (a new probe, a fresh catalogue sync, an approved review), never by hand.
Think a number here is wrong?
Every figure on PanelCompare carries the date it was captured, and every one of them can be challenged with evidence. The process, including what counts as evidence and how long a correction takes, is written out on the about page. Panel owners can also reply on the record to any complaint published against them.