我们把 500 个 iOS 订阅 App 付费墙案例做成了一个可读取的 GitHub 数据集
最近我们把 PaywallPro 的一部分数据开放到了 GitHub:
Open Paywall Gallery
github.com/paywallpro/…
这是一个 iOS 订阅 App 付费墙与 Onboarding 的公开数据集。第一批开放了 Top 500 iOS 订阅 App 案例,后续会保持每周新增 50 个 App 的节奏。
和普通截图合集不同,这个仓库里的 App 条目主要以 Markdown 文件组织,便于直接阅读,也方便后续做程序化读取和分析。
仓库里包含什么?
目前每个 App 条目会尽量包含这些内容:
- App 基础信息
- App Store 品类
- 付费墙截图
- Onboarding 预览
- 定价模型
- 付费墙模式
- 部分 MRR / ARPU / RPD 等变现信号
- PaywallPro 完整页面链接
这些内容适合做几类事情:
- 竞品付费墙研究
- 订阅定价参考
- Onboarding 路径分析
- 付费墙模式分类
- 同品类 App 对比
- 增长实验假设整理
为什么用 GitHub 承载?
我们选择 GitHub,主要是因为它天然适合承载这类开放数据项目。
第一,开发者熟悉 GitHub。
如果一个数据集面向 iOS 开发者、独立开发者、产品技术团队,放在 GitHub 上会降低理解和使用门槛。
第二,Markdown 适合人读。
相比直接丢 JSON 或 CSV,Markdown 页面更方便浏览单个 App 案例,也适合放截图、表格、解释和链接。
第三,结构化字段适合机器读。
每个 App 文件里可以包含 frontmatter 或固定格式内容,后续可以进一步解析成 JSON、CSV 或索引数据。
第四,Issue 适合收集反馈。
比如用户想看哪个 App、哪个品类、哪个字段,都可以直接通过 Issue 提。
第五,版本历史适合跟踪更新。
后续每周新增 50 个 App,GitHub 的 commit、release、diff 都能自然记录变化。
一个可能的数据读取方式
如果后续你想对这个仓库做进一步分析,可以把它当作一个半结构化数据源。
比如读取 apps/ 目录下的 Markdown 文件,然后解析里面的字段。
伪代码大概是这样:
import fs from "fs";
import path from "path";
import matter from "gray-matter";
const appsDir = "./apps";
const files = fs.readdirSync(appsDir).filter(file => file.endsWith(".md"));
const apps = files.map(file => {
const content = fs.readFileSync(path.join(appsDir, file), "utf-8");
const { data, content: body } = matter(content);
return {
file,
appName: data.app_name,
appId: data.app_id,
category: data.category,
paywallType: data.paywall_type,
pricingModel: data.pricing_model,
mrr: data.mrr,
rating: data.rating,
screenshotsCount: data.screenshots_count,
url: data.app_detail_url,
body
};
});
console.log(apps.length);
这样就可以把 500 个 App 条目整理成一个数组,后续可以继续做:
- 按品类统计数量
- 按 paywall_type 分组
- 筛选有 free trial 的案例
- 筛选年付优先的案例
- 统计不同品类常见定价结构
- 生成自己的研究表格
可以做哪些简单分析?
比如你可以先做一个品类分布:
const categoryCount = {};
for (const app of apps) {
const category = app.category || "Unknown";
categoryCount[category] = (categoryCount[category] || 0) + 1;
}
console.table(categoryCount);
也可以统计不同付费墙模式:
const patternCount = {};
for (const app of apps) {
const pattern = app.paywallType || "Unknown";
patternCount[pattern] = (patternCount[pattern] || 0) + 1;
}
console.table(patternCount);
再进一步,可以把数据导出成 CSV:
import { stringify } from "csv-stringify/sync";
const csv = stringify(apps, {
header: true,
columns: [
"appName",
"appId",
"category",
"paywallType",
"pricingModel",
"mrr",
"rating",
"screenshotsCount",
"url"
]
});
fs.writeFileSync("./paywall-gallery.csv", csv);
这样就可以放到 Google Sheets、Airtable、Notion 或自己的内部分析工具里继续处理。
这个数据集能帮开发者做什么?
如果你正在做一个订阅 App,它可以作为一个早期研究工具。
比如在设计 paywall 之前,可以先拉出同品类的 10 到 20 个 App,看它们的共性:
- 是否提供免费试用
- 是否默认突出年付
- 是否展示节省比例
- 是否有周付入口
- 是否把 paywall 放在 onboarding 后
- 是否使用多套餐结构
- CTA 是偏功能,还是偏结果
这些观察可以转成产品测试假设。
比如:
- 是否增加 3 天或 7 天免费试用?
- 是否把年付设为默认选项?
- 是否增加低价月付入口?
- 是否在 Onboarding 之后再展示 paywall?
- 是否先让用户完成一次个性化流程?
这样做的价值在于,设计和测试之前,可以先有一批真实市场案例作为参考。
后续计划
这个仓库会持续更新。
目前计划是:
- 每周新增 50 个 App
- 补充更多品类
- 完善 paywall pattern 分类
- 增加更多专题页面
- 根据 Issue 补充大家想看的 App
- 后续探索 Skills 版本
如果你希望这个数据集更适合程序化使用,也欢迎在 Issue 里提建议。
比如:
- 是否需要 JSON 导出?
- 是否需要 CSV 文件?
- 是否需要 API?
- 是否需要按品类生成 index?
- 是否需要更细的 trial_duration 字段?
- 是否需要 default_selected_plan 字段?
最后
Open Paywall Gallery 地址:
如果你正在做 iOS 订阅 App、AI 工具、出海产品、增长实验或 UX 研究,可以收藏一下。
如果觉得这个开放数据集有用,也欢迎点个 Star。
我们会继续把更多真实 iOS 订阅 App 的付费墙、Onboarding、定价结构和部分变现信号整理出来,做成一个长期可用的开放资源。