← Research

Data packageCollected 9 Aug 2026Two language armsCC BY 4.0

Pricing-page corpus: the data

Two rows per vendor, one per language arm, every field machine-derived from a rendered page that is archived. The definition is stricter than most published counts, which is part of why the rate here is lower: a fact about definitions, not a claim that anyone else is wrong.

The unit of observation

The pricing page a visitor reaches from the vendor’s own homepage navigation.

English arm
Accept-Language: en-US
German arm
Accept-Language: de-DE
Frame
64 vendors, fixed before any page was opened
Folder
/data/pricing-pages-2026-08/
Not “a pricing page exists somewhere”: a page nobody can navigate to is not a disclosure.
Vendors in the frame
64BVP Nasdaq Emerging Cloud Index
Observations
128two per vendor, one per arm
Unmeasured
21of 128, across 13 vendors: missing, never negative
Licence
CC BY 4.0Reuse it, including to disagree with it.

What was measured

The page a visitor can actually reach.

The unit is the pricing page a visitor reaches from the vendor's own homepage navigation: English under Accept-Language: en-US, German under de-DE. Not “a pricing page exists somewhere”: a page nobody can navigate to is not a disclosure.

The frame is frame.md, the vendor list, fixed before any page was opened. Every observation carries the language the page actually came back in, detected from the text, rather than the language that was asked for, and 19 of 34 German-arm pages came back in English.

The two arms

From 64 vendors to the page that sorts its buyers.

Each arm drawn as the cascade the essay publishes. The marked rows are the ones the argument rests on.

Figure 1The English arm, from index to hybrid pages

Two codes for one question: of the 33 pages that show a price, between 19 and 26 also route some buyers to sales.

Source: author’s own coding, 64 BVP Nasdaq Emerging Cloud Index constituents, English arm, 9 Aug 2026.

Figure 2The German arm: translated, not localised

Fifteen of 64 companies present a genuinely German pricing page, and eight of those fifteen still price in US dollars.

Source: author’s own coding, same 64 constituents, German arm (de-DE), 9 Aug 2026.

Two fields, not one

The contact wall is a range, and the range is the finding.

The contact-wall figure is two fields, not one. The first version of this corpus reported the loose code as a single number and should not have: 16 of the 27 pages it counted carry the same phrase on the vendor's homepage, where there are no tiers at all, so the loose code cannot separate a tier-level contact wall from site-wide chrome. Both codes are published and the honest statement is the range between them.

Figure 3English pages that show a price and also route some buyers to sales

The range between the two codes

The strict code counts a contact prompt within about 1,500 characters of a price, roughly inside the tier block. The loose code counts one anywhere on the page.

0% 50% 100% 58% 79% Strict: 19 of 33 Loose: 26 of 33

Fields: contact_wall_near_price and contact_wall_anywhere. Base: the 33 English-arm pages with at least one rendered price.

Missing data

Unmeasured is never counted as opaque.

valid is false when the fetch never returned a real page. That is missing data, never a negative: 21 of 128 observations across 13 vendors are unmeasured and carry an UNMEASURED_* status rather than being counted as opacity.

Figure 4The status of every observation, by arm

codedno_pricing_link_in_navUNMEASURED_*

Counted from corpus.csv. Unmeasured: 9 homepages and 12 pricing pages blocked, all kept in the file with that status.

The corpus

Two rows per vendor, as coded.

Ten rows sampled from the file and shown exactly as they appear in it, blanks included.

Sampled: 10 of 128 rows · corpus.csv · the name, domain and url columns are not shown here

The full file, 13 kB
Ten rows sampled from corpus.csv
symbolarmstatusvalidcontent_langshows_pricen_price_pointscontact_wall_near_pricecontact_wall_anywherecurrenciesdom_sha256
ADBEencodedTrueenTrue5FalseFalseUSD979e5c7a641a096e
ADBEde3codedTrueenFalse0FalseFalseUSD781958f64ffb2804
AGYSenno_pricing_link_in_navTrue
AIen2UNMEASURED_homepage_blockedFalse
ASANdecodedTruedeTrue5TrueTrueEUR|USD3523a694b4626102
DOCUen1codedTruedeTrue31TrueTrueEUR|GBP|USDc97228509df059b9
HUBSdecodedTruedeTrue11TrueTrueEUR|USDecc4af4f53fc1620
PDen4codedTrueenTrue16FalseFalseUSD59e2e92441024aec
SHOPde2UNMEASURED_pricing_page_blockedFalse
WIXdecodedTruedeFalse0FalseFalseEUR62b36294961aedd1

1DOCU: the “Plans & Pricing” link points at ecom.docusign.com, the subdomain a same-domain filter discarded in the first collection. Asked for in en-US, the page came back in German: collection ran from a German IP.

2AI, SHOP: valid = False. The fetch never returned a real page, so every coded field is blank: missing data, never a negative.

3ADBE de: asked for in de-DE, served in English. 19 of the 34 reachable German-arm pages came back in English.

4PD en: a price on the page and no contact-sales prompt anywhere on it, one of seven such English pages.

The codebook

Every field, machine-derived from an archived render.

arm
en or de: the language the request asked for.
status
coded, no_pricing_link_in_nav, or UNMEASURED_*.
valid
False when the fetch never returned a real page. Missing data, never a negative.
content_lang
The language the page actually came back in, detected from the text.
shows_price
At least one currency amount rendered on the page.
contact_wall_near_price
A contact-sales prompt within 1,500 characters of a price: the strict, tier-level reading.
contact_wall_anywhere
A contact-sales prompt anywhere on the page: the loose reading.
n_price_points
The count of distinct currency amounts. A proxy for priced tiers, not a tier count: add-ons and monthly and annual pairs inflate it.
dom_sha256
The first 16 hex characters of the rendered DOM hash.

The frame

Fixed before any page was opened.

The 64 constituents of the BVP Nasdaq Emerging Cloud Index, read from the data payload of cloudindex.bvp.com/companies on 9 August 2026. Chosen because it is public, enumerable, dated and not conditioned on pricing visibility: a universe built by tracking pricing pages cannot contain a vendor that has none.

  1. 1ADBEAdobeadobe.com
  2. 2AGYSAgilysysagilysys.com
  3. 3AIC3.aic3.ai
  4. 4ALKTAlkamialkami.com
  5. 5APPFAppFolioappfolio.com
  6. 6ASANAsanaasana.com
  7. 7AVPTAvePointavepoint.com
  8. 8BILLBill.combill.com
  9. 9BLBlackLineblackline.com
  10. 10BRZEBrazebraze.com
  11. 11CLBTCellebritecellebrite.com
  12. 12CRMSalesforcesalesforce.com
  13. 13CRWDCrowdstrikecrowdstrike.com
  14. 14CXMSprinklrsprinklr.com
  15. 15DDOGDatadogdatadoghq.com
  16. 16DOCNDigitalOceandigitalocean.com
  17. 17DOCUDocuSigndocusign.com
  18. 18DTDynatracedynatrace.com
  19. 19ESTCElasticelastic.co
  20. 20FIGFigmafigma.com
  21. 21FIVNFive9five9.com
  22. 22FROGJFrogjfrog.com
  23. 23FRSHFreshworksfreshworks.com
  24. 24FSLYFastlyfastly.com
  25. 25GTLBGitlabgitlab.com
  26. 26HUBSHubSpothubspot.com
  27. 27INTAIntappintapp.com
  28. 28IOTSamsarasamsara.com
  29. 29KVYOKlaviyoklaviyo.com
  30. 30MDBMongoDBmongodb.com
  31. 31MNDYMonday.commonday.com
  32. 32NCNOnCinoncino.com
  33. 33NETCloudflarecloudflare.com
  34. 34NOWServiceNowservicenow.com
  35. 35NTNXNutanixnutanix.com
  36. 36OKTAOktaokta.com
  37. 37PANWPalo Alto Networkspaloaltonetworks.com
  38. 38PATHUiPathuipath.com
  39. 39PAYCPaycompaycom.com
  40. 40PCORProcoreprocore.com
  41. 41PCTYPaylocitypaylocity.com
  42. 42PDPagerDutypagerduty.com
  43. 43PLTRPalantirpalantir.com
  44. 44QLYSQualysqualys.com
  45. 45QTWOQ2q2.com
  46. 46RBRKRubrikrubrik.com
  47. 47RNGRingcentralringcentral.com
  48. 48SSentinelOnesentinelone.com
  49. 49SAILSailPointsailpoint.com
  50. 50SHOPShopifyshopify.com
  51. 51SNOWSnowflakesnowflake.com
  52. 52SPSCSPS Commercespscommerce.com
  53. 53TEAMAtlassianatlassian.com
  54. 54TENBTenabletenable.com
  55. 55TOSTToasttoasttab.com
  56. 56TTANServiceTitanservicetitan.com
  57. 57TWLOTwiliotwilio.com
  58. 58VEEVVeeva Systemsveeva.com
  59. 59WDAYWorkdayworkday.com
  60. 60WEAVWeavegetweave.com
  61. 61WIXWixwix.com
  62. 62WKWorkivaworkiva.com
  63. 63ZETAZetazetaglobal.com
  64. 64ZSZscalerzscaler.com

NoteA natural-language read of the same page reported “101 total companies”. The payload holds 64. The list above is the payload.

ReusedThe same frame carries the gross-margin panel

Collection defects

Two collection defects, recorded rather than buried.

Both were found after a first collection and are stated here because a corpus whose defects are only in its author’s head is not checkable.

  1. Defect 1

    53 challenge pages scored as vendors with no pricing link.

    A first collection scored 53 CDN challenge pages and consent interstitials as vendors with no pricing link. The cause was an unfingerprinted headless browser and no validity screen on a render. Every observation now passes an anchor-count and byte floor with one retry; anything that still fails is UNMEASURED_*.

  2. Defect 2

    A same-domain filter rejected vendor subdomains.

    It discarded DocuSign’s “Plans & Pricing” link because it points at ecom.docusign.com.

Full archives of every rendered page, the collector as run, and the audit that caught the first defect are retained in the source library alongside the published files.

Standing limitations

What the corpus cannot carry.

  • Collection ran from a German IP, so geo-routing and Accept-Language can disagree. This is measured rather than assumed: content_lang records what actually came back, and 19 of 34 German-arm pages came back in English.

  • One observation per vendor per arm, on one day. Page churn is unmeasured.

  • Contact-CTA detection is an English/German phrase list. Unusual wording reads as no wall.

  • n_price_points is a proxy for priced tiers, not a tier count. Add-ons and monthly/annual pairs inflate it.

  • The frame is US-listed public cloud companies. It is not “SaaS” and generalises to nothing wider.

Files

Three files, readable in anything.

Text and CSV throughout. Nothing here needs an account or a tool to open.

  • codebook.mdThe definition, every field, why the contact wall is two fields, the two collection defects, and the standing limitations.
    3 kB Download
  • corpus.csvThe corpus. Two rows per vendor: arm, status, valid, content_lang, shows_price, both contact-wall codes, n_price_points and the rendered-DOM hash.
    13 kB Download
  • frame.mdThe vendor list, fixed before any page was opened. Also the frame the gross-margin panel reuses.
    3 kB Download

Licence and citation

Reuse it, including to disagree with it.

Cite the data

Isoglu, S. (2026). Pricing-page corpus: what listed cloud vendors show on the page a visitor can reach. isoglu.com.

CC BY 4.0

Released under CC BY 4.0.

Package
pricing-pages-2026-08
Published
9 Aug 2026
Codebook
9 August 2026
Frame shared with
Gross-margin panel