我们把 500 个 iOS 订阅 App 付费墙案例做成了一个可读取的 GitHub 数据集

0 阅读4分钟

我们把 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 地址:

github.com/paywallpro/…

如果你正在做 iOS 订阅 App、AI 工具、出海产品、增长实验或 UX 研究,可以收藏一下。

如果觉得这个开放数据集有用,也欢迎点个 Star。

我们会继续把更多真实 iOS 订阅 App 的付费墙、Onboarding、定价结构和部分变现信号整理出来,做成一个长期可用的开放资源。