Skip to content

Instantly share code, notes, and snippets.

@DreamingInBinary
Last active January 9, 2026 18:54
Show Gist options
  • Select an option

  • Save DreamingInBinary/d0f64bbf205dfc1d921b181808f916c9 to your computer and use it in GitHub Desktop.

Select an option

Save DreamingInBinary/d0f64bbf205dfc1d921b181808f916c9 to your computer and use it in GitHub Desktop.
Contentful CMS Data
This file has been truncated, but you can view the full file.
{
"contentTypes": [
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "post",
"type": "ContentType",
"createdAt": "2023-10-30T21:53:15.641Z",
"updatedAt": "2025-02-21T22:42:33.651Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 29,
"publishedAt": "2025-02-21T22:42:33.651Z",
"firstPublishedAt": "2023-10-30T21:53:15.857Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"publishedCounter": 15,
"version": 30,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/content_types/post"
},
"displayField": "title",
"name": "Post",
"description": "A blog post",
"fields": [
{
"id": "title",
"name": "title",
"type": "Symbol",
"localized": false,
"required": true,
"validations": [
],
"defaultValue": {
"en-US": "New Post"
},
"disabled": false,
"omitted": false
},
{
"id": "slug",
"name": "slug",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "subtitle",
"name": "subtitle",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "image",
"name": "image",
"type": "Link",
"localized": false,
"required": false,
"validations": [
{
"linkMimetypeGroup": [
"image"
]
}
],
"disabled": false,
"omitted": false,
"linkType": "Asset"
},
{
"id": "body",
"name": "body",
"type": "RichText",
"localized": false,
"required": false,
"validations": [
{
"enabledMarks": [
"bold",
"italic",
"underline",
"code",
"superscript",
"subscript"
],
"message": "Only bold, italic, underline, code, superscript, and subscript marks are allowed"
},
{
"enabledNodeTypes": [
"heading-1",
"heading-2",
"heading-3",
"heading-4",
"heading-5",
"heading-6",
"ordered-list",
"unordered-list",
"hr",
"blockquote",
"embedded-entry-block",
"embedded-asset-block",
"table",
"hyperlink",
"asset-hyperlink",
"embedded-entry-inline",
"entry-hyperlink"
],
"message": "Only heading 1, heading 2, heading 3, heading 4, heading 5, heading 6, ordered list, unordered list, horizontal rule, quote, block entry, asset, table, link to Url, link to asset, inline entry, and link to entry nodes are allowed"
},
{
"nodes": {
}
}
],
"disabled": true,
"omitted": false
},
{
"id": "markdownBody",
"name": "markdown",
"type": "Text",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "author",
"name": "author",
"type": "Link",
"localized": false,
"required": false,
"validations": [
{
"linkContentType": [
"member"
]
}
],
"disabled": false,
"omitted": false,
"linkType": "Entry"
},
{
"id": "hidden",
"name": "hidden",
"type": "Boolean",
"localized": false,
"required": true,
"validations": [
],
"defaultValue": {
"en-US": false
},
"disabled": false,
"omitted": false
},
{
"id": "date",
"name": "date",
"type": "Date",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "updatedPostPublishDate",
"name": "updatedPostPublishDate",
"type": "Date",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
}
]
},
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "member",
"type": "ContentType",
"createdAt": "2023-11-01T18:01:57.443Z",
"updatedAt": "2023-11-01T18:18:50.388Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 11,
"publishedAt": "2023-11-01T18:18:50.388Z",
"firstPublishedAt": "2023-11-01T18:01:57.763Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 6,
"version": 12,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/content_types/member"
},
"displayField": "name",
"name": "Member",
"description": "A member of Superwall",
"fields": [
{
"id": "name",
"name": "name",
"type": "Symbol",
"localized": false,
"required": true,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "slug",
"name": "slug",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "title",
"name": "title",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "image",
"name": "image",
"type": "Link",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false,
"linkType": "Asset"
},
{
"id": "email",
"name": "email",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
{
"regexp": {
"pattern": "^\\w[\\w.-]*@([\\w-]+\\.)+[\\w-]+$",
"flags": null
}
}
],
"disabled": false,
"omitted": false
},
{
"id": "twitter",
"name": "twitter",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "linkedin",
"name": "linkedin",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
}
]
},
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "page",
"type": "ContentType",
"createdAt": "2023-11-02T15:58:05.439Z",
"updatedAt": "2023-11-02T16:43:09.220Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 15,
"publishedAt": "2023-11-02T16:43:09.220Z",
"firstPublishedAt": "2023-11-02T15:58:05.655Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 8,
"version": 16,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/content_types/page"
},
"displayField": "title",
"name": "Page",
"description": "A landing page",
"fields": [
{
"id": "title",
"name": "title",
"type": "Symbol",
"localized": false,
"required": true,
"validations": [
],
"defaultValue": {
"en-US": "New Post"
},
"disabled": false,
"omitted": false
},
{
"id": "slug",
"name": "slug",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "subtitle",
"name": "subtitle",
"type": "Text",
"localized": false,
"required": false,
"validations": [
],
"disabled": false,
"omitted": false
},
{
"id": "image",
"name": "image",
"type": "Link",
"localized": false,
"required": false,
"validations": [
{
"linkMimetypeGroup": [
"image"
]
}
],
"disabled": false,
"omitted": false,
"linkType": "Asset"
},
{
"id": "body",
"name": "body",
"type": "RichText",
"localized": false,
"required": true,
"validations": [
{
"enabledMarks": [
"bold",
"italic",
"underline",
"code",
"superscript",
"subscript"
],
"message": "Only bold, italic, underline, code, superscript, and subscript marks are allowed"
},
{
"enabledNodeTypes": [
"heading-1",
"heading-2",
"heading-3",
"heading-4",
"heading-5",
"heading-6",
"ordered-list",
"unordered-list",
"hr",
"blockquote",
"embedded-entry-block",
"embedded-asset-block",
"table",
"hyperlink",
"asset-hyperlink",
"embedded-entry-inline",
"entry-hyperlink"
],
"message": "Only heading 1, heading 2, heading 3, heading 4, heading 5, heading 6, ordered list, unordered list, horizontal rule, quote, block entry, asset, table, link to Url, link to asset, inline entry, and link to entry nodes are allowed"
},
{
"nodes": {
}
}
],
"disabled": false,
"omitted": false
},
{
"id": "section",
"name": "section",
"type": "Symbol",
"localized": false,
"required": false,
"validations": [
{
"in": [
"sales",
"landing"
]
}
],
"disabled": false,
"omitted": false
}
]
}
],
"tags": [
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "company",
"type": "Tag",
"createdAt": "2023-10-30T20:42:13.781Z",
"updatedAt": "2023-10-30T20:42:13.781Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"version": 1,
"visibility": "public"
},
"name": "Company"
},
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "growth",
"type": "Tag",
"createdAt": "2023-10-30T22:03:36.567Z",
"updatedAt": "2023-10-30T22:03:36.567Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"version": 1,
"visibility": "public"
},
"name": "Growth"
},
{
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "engineering",
"type": "Tag",
"createdAt": "2023-10-30T22:05:33.424Z",
"updatedAt": "2023-10-30T22:05:33.424Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"version": 1,
"visibility": "public"
},
"name": "Engineering"
}
],
"editorInterfaces": [
{
"sys": {
"id": "default",
"type": "EditorInterface",
"space": {
"sys": {
"id": "3k7cygmwfm7x",
"type": "Link",
"linkType": "Space"
}
},
"version": 30,
"createdAt": "2023-10-30T21:53:16.004Z",
"createdBy": {
"sys": {
"id": "3Kt0l2x0ToLXIpZ5fCXxvt",
"type": "Link",
"linkType": "User"
}
},
"updatedAt": "2025-02-21T22:42:34.374Z",
"updatedBy": {
"sys": {
"id": "6M5Rjhleba9h6vT35g8w6G",
"type": "Link",
"linkType": "User"
}
},
"contentType": {
"sys": {
"id": "post",
"type": "Link",
"linkType": "ContentType"
}
},
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
}
},
"controls": [
{
"fieldId": "title",
"settings": {
"helpText": "Name of the article"
},
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "slug",
"widgetId": "slugEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "subtitle",
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "image",
"settings": {
"helpText": "No need for logos and try to avoid text. Should look good small or large.",
"showLinkEntityAction": true,
"showCreateEntityAction": true
},
"widgetId": "assetLinkEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "body",
"settings": {
"helpText": "Content of your post"
},
"widgetId": "richTextEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "markdownBody",
"settings": {
"helpText": "You can use this instead of the main body field"
},
"widgetId": "markdown",
"widgetNamespace": "builtin"
},
{
"fieldId": "author",
"settings": {
"showLinkEntityAction": true,
"showCreateEntityAction": false
},
"widgetId": "entryLinkEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "hidden",
"widgetId": "boolean",
"widgetNamespace": "builtin"
},
{
"fieldId": "date",
"settings": {
"ampm": "12",
"format": "dateonly",
"helpText": "Overrides created at date"
},
"widgetId": "datePicker",
"widgetNamespace": "builtin"
},
{
"fieldId": "updatedPostPublishDate",
"settings": {
"ampm": "24",
"format": "dateonly",
"helpText": "Date a previously published post was updated with new or changed content."
},
"widgetId": "datePicker",
"widgetNamespace": "builtin"
}
]
},
{
"sys": {
"id": "default",
"type": "EditorInterface",
"space": {
"sys": {
"id": "3k7cygmwfm7x",
"type": "Link",
"linkType": "Space"
}
},
"version": 12,
"createdAt": "2023-11-01T18:01:57.970Z",
"createdBy": {
"sys": {
"id": "3Kt0l2x0ToLXIpZ5fCXxvt",
"type": "Link",
"linkType": "User"
}
},
"updatedAt": "2023-11-01T18:18:50.882Z",
"updatedBy": {
"sys": {
"id": "3Kt0l2x0ToLXIpZ5fCXxvt",
"type": "Link",
"linkType": "User"
}
},
"contentType": {
"sys": {
"id": "member",
"type": "Link",
"linkType": "ContentType"
}
},
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
}
},
"controls": [
{
"fieldId": "name",
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "slug",
"widgetId": "slugEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "title",
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "image",
"widgetId": "assetLinkEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "email",
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "twitter",
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "linkedin",
"widgetId": "urlEditor",
"widgetNamespace": "builtin"
}
]
},
{
"sys": {
"id": "default",
"type": "EditorInterface",
"space": {
"sys": {
"id": "3k7cygmwfm7x",
"type": "Link",
"linkType": "Space"
}
},
"version": 16,
"createdAt": "2023-11-02T15:58:05.860Z",
"createdBy": {
"sys": {
"id": "3Kt0l2x0ToLXIpZ5fCXxvt",
"type": "Link",
"linkType": "User"
}
},
"updatedAt": "2023-11-02T16:43:09.711Z",
"updatedBy": {
"sys": {
"id": "3Kt0l2x0ToLXIpZ5fCXxvt",
"type": "Link",
"linkType": "User"
}
},
"contentType": {
"sys": {
"id": "page",
"type": "Link",
"linkType": "ContentType"
}
},
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
}
},
"controls": [
{
"fieldId": "title",
"settings": {
"helpText": "Name of the article"
},
"widgetId": "singleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "slug",
"widgetId": "slugEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "subtitle",
"widgetId": "multipleLine",
"widgetNamespace": "builtin"
},
{
"fieldId": "image",
"widgetId": "assetLinkEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "body",
"settings": {
"helpText": "Content of your post"
},
"widgetId": "richTextEditor",
"widgetNamespace": "builtin"
},
{
"fieldId": "section",
"widgetId": "dropdown",
"widgetNamespace": "builtin"
}
]
}
],
"entries": [
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "engineering"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "60YAr2214uY5wYLlPfjoYn",
"type": "Entry",
"createdAt": "2023-10-31T04:37:32.213Z",
"updatedAt": "2024-02-21T00:20:47.304Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 160,
"publishedAt": "2024-02-21T00:20:47.304Z",
"firstPublishedAt": "2023-10-31T04:45:48.753Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 13,
"version": 161,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/60YAr2214uY5wYLlPfjoYn"
},
"fields": {
"title": {
"en-US": "Rich Text Guide"
},
"slug": {
"en-US": "rich-text-test"
},
"subtitle": {
"en-US": "This is a new post"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "3pAFmfwPrFzxH5Xr0tM0TF"
}
}
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Code",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-1",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H1 - Render Test",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "This is body text. this is ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "bolded",
"marks": [
{
"type": "bold"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " text. this is ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "italic",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " text. this is ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "underlined",
"marks": [
{
"type": "underline"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": ". this is ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "inline code ",
"marks": [
{
"type": "code"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": "for your reference. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-2",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H2 - Links",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "link: this is a ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://google.com"
},
"content": [
{
"nodeType": "text",
"value": "link",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " to google",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "asset link: here is a link to ",
"marks": [
],
"data": {
}
},
{
"nodeType": "asset-hyperlink",
"data": {
"target": {
"sys": {
"id": "2OtMoHRN3WqkX5vy5hrs7z",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
{
"nodeType": "text",
"value": "an image",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "entry link: this is ",
"marks": [
],
"data": {
}
},
{
"nodeType": "entry-hyperlink",
"data": {
"target": {
"sys": {
"id": "60YAr2214uY5wYLlPfjoYn",
"type": "Link",
"linkType": "Entry"
}
}
},
"content": [
{
"nodeType": "text",
"value": "a link to an entry",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": ".",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-2",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H2 - Embeds",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "embedded entry",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-entry-block",
"data": {
"target": {
"sys": {
"id": "5Js0wl6iUHQNJhynjuVpiG",
"type": "Link",
"linkType": "Entry"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "inline entry",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
},
{
"nodeType": "embedded-entry-inline",
"data": {
"target": {
"sys": {
"id": "5Js0wl6iUHQNJhynjuVpiG",
"type": "Link",
"linkType": "Entry"
}
}
},
"content": [
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "asset image",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "2OtMoHRN3WqkX5vy5hrs7z",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "asset video",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "abBDMq6p5KJeYZ3xBuOeM",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "asset screenshot",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "1dzwNlWn7s12GaaxZDFUhd",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "asset files",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "6PgqgHiJjFdfCwdRtUIWDS",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "6QQtH7dq3CGVXozM4yHngU",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "4KZSX6y7LVXNswffpbYVXg",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "heading-2",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H2 - Lists",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H3 - Unordered list",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "H3 - Ordered list",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "first",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "second",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui anim adipisicing sint ex labore culpa non anim voluptate. Sint qui minim ut laborum.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": " Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": " Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": " Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": " Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"nodeType": "blockquote",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "This is a quote → Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui anim adipisicing sint ex labore culpa non anim voluptate. Sint qui minim ut laborum. Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "hr",
"data": {
},
"content": [
]
},
{
"nodeType": "table",
"data": {
},
"content": [
{
"nodeType": "table-row",
"data": {
},
"content": [
{
"nodeType": "table-header-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Column 1",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-header-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Column 2",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-header-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Column 3",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-header-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Column 4",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "table-row",
"data": {
},
"content": [
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "row 1",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "a",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "b",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "c",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "table-row",
"data": {
},
"content": [
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "row 2",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "a",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "b",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "c",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "table-row",
"data": {
},
"content": [
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "row 3",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "a",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "b",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "c",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "table-row",
"data": {
},
"content": [
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "row 4",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "a",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "b",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "table-cell",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "c",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "heading-4",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Finally we have reached heading 4",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Ea incididunt occaecat tempor in occaecat mollit proident laboris duis id consequat. Ad veniam laboris deserunt mollit non qui anim adipisicing sint ex labore culpa non anim voluptate. Sint qui minim ut laborum.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-5",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "And heading 5",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": " Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-6",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Heading 6",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Lorem quis excepteur minim cillum. Id sint pariatur esse ullamco et dolore culpa laborum exercitation proident sit. Quis anim ea in. Elit dolor elit excepteur incididunt sit duis quis proident. Velit Lorem ad elit eiusmod aliquip voluptate dolore dolore mollit fugiat ullamco ad nulla.",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": true
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "HsLyyvHzeoItbESDyweim",
"type": "Entry",
"createdAt": "2023-11-01T18:03:46.091Z",
"updatedAt": "2023-11-01T18:04:40.767Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 7,
"publishedAt": "2023-11-01T18:04:40.767Z",
"firstPublishedAt": "2023-11-01T18:04:40.767Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 8,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/HsLyyvHzeoItbESDyweim"
},
"fields": {
"name": {
"en-US": "Jake Mor"
},
"slug": {
"en-US": "jake-mor"
},
"title": {
"en-US": "Co-founder & CEO"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "4BDcjgEEw2nlj2ZXm9gGqz"
}
}
},
"email": {
"en-US": "jake@superwall.com"
},
"twitter": {
"en-US": "jakemor"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/jake-mor-3b397392/"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "5spFLdxP4gRwECypX6mT1M",
"type": "Entry",
"createdAt": "2023-11-01T18:05:59.016Z",
"updatedAt": "2023-11-01T18:06:40.114Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 6,
"publishedAt": "2023-11-01T18:06:40.114Z",
"firstPublishedAt": "2023-11-01T18:06:40.114Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 7,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/5spFLdxP4gRwECypX6mT1M"
},
"fields": {
"name": {
"en-US": "Brian Anglin"
},
"slug": {
"en-US": "brian-anglin"
},
"title": {
"en-US": "Co-founder & CTO"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "2MovfoVhTZkI4JCDPGXyH0"
}
}
},
"email": {
"en-US": "brian@superwall.com"
},
"twitter": {
"en-US": "BriansAngles"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/yusuftor/"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "4b58nZo8ipNBPlrCDwRsjC",
"type": "Entry",
"createdAt": "2023-11-01T18:06:44.710Z",
"updatedAt": "2023-11-01T18:07:55.924Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 10,
"publishedAt": "2023-11-01T18:07:55.924Z",
"firstPublishedAt": "2023-11-01T18:07:55.924Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 11,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/4b58nZo8ipNBPlrCDwRsjC"
},
"fields": {
"name": {
"en-US": "Yusuf Tör"
},
"slug": {
"en-US": "yusuf-tor"
},
"title": {
"en-US": "Lead SDK Engineer"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "5C7YpdQcXVzjDhEuAS62zV"
}
}
},
"email": {
"en-US": "yusuf@superwall.com"
},
"twitter": {
"en-US": "yusuftor"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/yusuftor/"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "uAhXMaEHUdqgoZXZSqrxr",
"type": "Entry",
"createdAt": "2023-11-01T18:08:07.944Z",
"updatedAt": "2023-11-01T18:09:35.265Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 7,
"publishedAt": "2023-11-01T18:09:35.265Z",
"firstPublishedAt": "2023-11-01T18:09:35.265Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 8,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/uAhXMaEHUdqgoZXZSqrxr"
},
"fields": {
"name": {
"en-US": "Jonathan Parra"
},
"slug": {
"en-US": "jonathan-parra"
},
"title": {
"en-US": "Senior Designer"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "4tVawHrJchapGgJV3ZTntH"
}
}
},
"email": {
"en-US": "jonathan@superwall.com"
},
"twitter": {
"en-US": "jondeparra"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/jondeparra/"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "s5MifNmfnHkrhnf00UZ6c",
"type": "Entry",
"createdAt": "2023-11-01T18:09:49.819Z",
"updatedAt": "2023-11-02T18:04:12.101Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 10,
"publishedAt": "2023-11-02T18:04:12.101Z",
"firstPublishedAt": "2023-11-01T18:11:30.647Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "0UNyuZNmrU4gASZYngcnKl"
}
},
"publishedCounter": 2,
"version": 11,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "0UNyuZNmrU4gASZYngcnKl"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/s5MifNmfnHkrhnf00UZ6c"
},
"fields": {
"name": {
"en-US": "Bryan Dubno"
},
"slug": {
"en-US": "bryan-dubno"
},
"title": {
"en-US": "Senior Software Engineer"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "3gMtNb6CL9P9WX9AleTKTz"
}
}
},
"email": {
"en-US": "bryan@superwall.com"
},
"twitter": {
"en-US": "bryandubno"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/bryandubno/"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "m3ZSGHbvIxrCjGencmDob",
"type": "Entry",
"createdAt": "2023-11-01T18:11:37.577Z",
"updatedAt": "2023-11-01T18:15:42.561Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 9,
"publishedAt": "2023-11-01T18:15:42.561Z",
"firstPublishedAt": "2023-11-01T18:15:42.561Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 10,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/m3ZSGHbvIxrCjGencmDob"
},
"fields": {
"name": {
"en-US": "Robert Reichel"
},
"slug": {
"en-US": "robert-reichel"
},
"title": {
"en-US": "Software Engineer"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "3hu232XkeqM78X5elPhknj"
}
}
},
"email": {
"en-US": "robert@superwall.com"
},
"twitter": {
"en-US": "rreichel3"
},
"linkedin": {
"en-US": "https://www.linkedin.com/in/rreichel3/"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "1gtKqNGy6HP8rgI7QkPkIo",
"type": "Entry",
"createdAt": "2023-11-01T22:57:21.551Z",
"updatedAt": "2023-11-01T23:07:41.103Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 30,
"publishedAt": "2023-11-01T23:07:41.103Z",
"firstPublishedAt": "2023-11-01T23:01:29.612Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 5,
"version": 31,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/1gtKqNGy6HP8rgI7QkPkIo"
},
"fields": {
"title": {
"en-US": "Templates, 3.0, deprecations, and free paywalls!"
},
"slug": {
"en-US": "newsletter-1-templates-3-0-deprecations-and-free-paywalls"
},
"subtitle": {
"en-US": "News from the Superwall Team"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "0UUq5VuQmHeOWcmX65ZK3"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Thanks for being a part of the Superwall community! We’re kicking off the month with some exciting announcements, including the first issue of this very SuperNewsletter™. Let’s dive in!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🖼️ Template Gallery",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "The template gallery is live, and it’s never been easier to create a paywall. From the Dashboard, scroll down to ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywalls > Create New > From Template",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ". From there, you’ll have quick access to some of the best converting paywalls on the App Store. Simply select a template to customize the paywall with your own brand colors, text, fonts & more!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "6t5yFC7gpeW9onbEp1jPMb",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "✨ Superwall 3.0",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "\nPaywall 3.0 Superwall 3.0 is coming soon! We’re taking advantage of concurrency additions in Swift with async/await, consolidating APIs across SwiftUI and UIKit for added simplicity, adding compatibility support for Combine, and more! Look out for more information to come over the next few weeks.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "6bxhFH8DuA4pRYzFB3lfx5",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🧟 Deprecations",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "\nSpeaking of 3.0, ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywall.present()",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " has been deprecated for some time now in favor of ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywall.track()",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " and ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywall.trigger()",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ". Triggering a paywall provides much more flexibility around deciding what's displayed to users via the rules engine, and accepts parameters that can be referenced by the rules engine for even more dynamic paywall targeting. If you haven't yet moved to ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywall.track()",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " or ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "Paywall.trigger()",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ", you can find documentation details ",
"nodeType": "text"
},
{
"data": {
"uri": "https://docs.superwall.com/docs/triggering-paywalls"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ". Need help with implementation changes? Always feel free to reach out by replying here, or through the Intercom widget on the site!\n",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "62VYe59MduhLfschML1NOs",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "💸 Free Paywalls",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "\nSuperwall has built hundreds of paywalls for clients and has a unique vantage point on what's converting ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
}
],
"value": "today",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " across every category on the App Store. As a token of gratitude for signing up, we create a paywall for every customer using the daily insights we're gathering every single day (we're processing over 2 million events per day!). If you haven't yet had your free paywall created, please reach out",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Thanks for reading all the way through – we’re so grateful to have you here. As always, keep the feedback coming and don’t hesitate to reach out. You can reply directly to this email or find us on Twitter ",
"nodeType": "text"
},
{
"data": {
"uri": "https://twitter.com/superwall"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "@superwall",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Happy paywall'ing!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "s5MifNmfnHkrhnf00UZ6c"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2022-10-10"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "3yRfXDAK45dJ7C5ha0WgP2",
"type": "Entry",
"createdAt": "2023-11-01T23:09:23.566Z",
"updatedAt": "2023-11-01T23:14:13.850Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 29,
"publishedAt": "2023-11-01T23:14:13.850Z",
"firstPublishedAt": "2023-11-01T23:13:18.243Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 3,
"version": 30,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/3yRfXDAK45dJ7C5ha0WgP2"
},
"fields": {
"title": {
"en-US": "Visual rules editor, new style editor, localization, and behind the scenes"
},
"slug": {
"en-US": "newsletter-2-visual-rules-editor-new-style-editor-localization-and-behind-the-scenes"
},
"subtitle": {
"en-US": "News from the Superwall Team"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "1YRo4N09pW5XENSU1W2WYt"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Good to see you again! We’re constantly asking ourselves “How can we make [everything] quicker?” – after all, the quicker you’re able to run a variety of experiments, the quicker you learn which paywalls are performing best for conversion. So, we’ve made some huge improvements to the most-used Superwall editors - the Rules editor and the Style editor. Let’s dive in!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "5TLXcdnU34FKfE3VSfXsZg",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "✨ Visual Rules Editor",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "‍",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Rules are one of the most powerful features of paywall campaigns. Do you ever wonder how to create a rule to filter by country, or find that manually typing out a rule like user.number_of_completed_exercise_sets == 12 to be a bit error-prone? We did too – so we very excitedly and intentionally launched the Visual Rules Editor. Now, you can easily choose from a dropdown of properties that include your custom user attributes, device, or event parameters to craft timely paywall-display Conditions. Combine this with (the also visual) Limit dropdown to experiment with various frequencies of execution.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "1YRo4N09pW5XENSU1W2WYt",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🎨 New Style Editor",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "‍",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "The new style editor is live, and this is an exciting one! Never has it been easier to change the look and feel of your paywalls – from layout and sizing to typography and effects – elements can now be quickly and visually modified to reflect your brand identity. To make use of the new style editor, simply tap on an element when editing your paywall and explore the panel of attributes on the right-hand side. Want to try something cool? Select an element and change the background color under the ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Layer",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " section to ",
"nodeType": "text"
},
{
"data": {
"uri": "https://www.w3schools.com/tags/ref_colornames.asp"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "any HTML color",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": " like aquamarine and see the results!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "4taPfjlb96kBeUpWNMR9q6",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "💬 Localization",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "\nOne question we often hear: how can I localize my paywall for various languages? If you’re on the Superwall Dashboard, scroll down to Localization and click on Manage Localization. From there, you can download a .strings file containing strings from across all of your paywalls. Once finished localizing, simply upload that file and you're ready to go. ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Pro-tip",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ": if you haven’t yet localized your app, translating your paywall before the rest of your app could be a strong indicator of which localizations to prioritize.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "6L4bGj4ELgg0XIEyOFNhvi",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "📽️ Behind the scenes",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "From new features, optimizations, paywall designs, SDK improvements, Dashboard updates and more, we’re focused on making paywall experimentation a breeze – and we couldn’t do it without your much-appreciated help. With all the feedback coming in, we want to transparently keep you in the loop on what we’re actively working on. We’ll soon be launching an interactive Product Roadmap where you can make requests, offer feedback, and get notified as soon as we start working on items you’re most interested in. More details coming soon!‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Thanks for reading all the way through – we’re so grateful to have you here. As always, keep the feedback coming and don’t hesitate to reach out. You can reply directly to this email or find us on Twitter ",
"nodeType": "text"
},
{
"data": {
"uri": "https://twitter.com/superwall"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "@superwall",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Happy paywall'ing!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "s5MifNmfnHkrhnf00UZ6c"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2022-11-07"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "growth"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "56ek3mZoIoOACTNsXZY8gE",
"type": "Entry",
"createdAt": "2023-11-01T23:15:31.276Z",
"updatedAt": "2023-11-02T01:39:48.190Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 25,
"publishedAt": "2023-11-02T01:39:48.190Z",
"firstPublishedAt": "2023-11-01T23:18:24.977Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 6,
"version": 26,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/56ek3mZoIoOACTNsXZY8gE"
},
"fields": {
"title": {
"en-US": "Two important metrics you probably aren’t tracking"
},
"slug": {
"en-US": "app-monetization-two-important-metrics-you-probably-arent-tracking"
},
"subtitle": {
"en-US": "If you're running an app, understanding how many users see your paywall is a critical metric. In this post, we discuss the relationship between transaction rate and paywalled rate for Superwall’s 25 biggest apps."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "62VYe59MduhLfschML1NOs"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Are you measuring the percentage of users who encounter your paywall?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "If you're running an app, understanding how many users see your paywall is a critical metric. Why? Because it's the best leading indicator of your transaction rate.‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Check out the chart below. It shows the transaction rate and paywalled rate for Superwall’s 25 biggest apps, in terms of number of transactions per month. As you can see, there is a strong correlation between the two metrics.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "2v9BtyMSGdReaPh7u83QFx",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "There is a very strong positive correlation between the percentage of users who see a paywall and the percentage of users who end up transacting. This makes perfect intuitive sense – you miss 100% of the shots you don’t take. For these reasons, we recommend customers target an install to paywall view rate of at least 85%. If your onboarding completion rate is anything less than 85%, you need to start showing your paywall before onboarding (at least until you get your onboarding completion rate up to 85% or more).",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "A natural next question: How many paywall presentations is too much? See below:",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "6iDlHaH67EvhG4P2otwzMa",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Of the top 25 apps on Superwall, every one with a transaction rate of over 5% has a paywall view per user (total paywall views divided by total users) of at least one. Accounting for a platform average of 56% of users even being paywalled, this means paywalled users are typically seeing a paywall ~2x before converting. This too makes intuitive sense – just as you miss 100% of the shots you don’t take, your chances of scoring increases with the number of shots you take.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Obviously, this isn’t the right approach for everyone. We typically don’t recommend obsessing over these metrics in a vacuum if your app (1) relies heavily on free user retention, (2) grows with referrals or (3) is a true network (where the utility of the network increases with each node that contributes). These are very real business goals that need to be included as a cost function for showing a paywall. If your app falls into these categories, we strongly recommend correlating the number of paywall views to your other core KPIs to determine how costly each paywall impression is. You need to know if things like retention, referrals, and contributions to the network decrease as paywall views increase.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Regardless, you need to test these things to make an informed decision. Superwall’s paywall management system makes this incredibly easy by enabling you to remotely configure (1) what paywall to show (2) where to show it (3) how often to show it (4) who to show it to and (5) what paywalls to test in each scenario. ‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Here’s an example of FitnessAI testing 2 different paywalls that shows when a set is logged or a new workout is viewed. The paywall shows to all users, but only up to 1 time every week, as to not be too annoying.  ",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "6A2ELns8JmQ6K1twENZYbc",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "If you’re interested, sign up for a Superwall demo to learn more. Superwall works with hundreds of companies to serve over 18M paywalls each month. There are more than a few reasons why 🤑",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2022-11-09"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "growth"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "6bTqv5cPcizKp1CKW835ic",
"type": "Entry",
"createdAt": "2023-11-02T04:39:16.439Z",
"updatedAt": "2023-11-02T05:25:35.511Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 51,
"publishedAt": "2023-11-02T05:25:35.511Z",
"firstPublishedAt": "2023-11-02T04:48:07.806Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 4,
"version": 52,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/6bTqv5cPcizKp1CKW835ic"
},
"fields": {
"title": {
"en-US": "How many products should you offer on your paywall?"
},
"slug": {
"en-US": "how-many-products-should-you-offer-on-your-paywall"
},
"subtitle": {
"en-US": "We pulled data from over 32M paywall interactions to determine how many products you should show on your paywall"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "6bxhFH8DuA4pRYzFB3lfx5"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "How many products should you offer on your paywall?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "This is a question that every app developer faces at some point. There are a lot of factors to consider, and it can be tough to know what the right answer is.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "To help you make the best decision for your app, we've pulled conversion rate data for every application, segmented by how many products they show on their paywall. We've filtered for apps that had at least 2 tests containing different number of products, and we've included the 15 largest apps (in terms of paywall views, all with more than 10,000 views).‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Here are the stats:‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Conversions",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "383,889",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Paywall Opens",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "32,303,995",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Conversion Rate",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "3.77%",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
"target": {
"sys": {
"id": "4OhXdUbLhtzWs8m6ASVSyq",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "As you can see from the chart, offering more than one product on your paywall can have a significant impact on your conversion rate. In fact, when we segmented the data by how many products were in each paywall, we found that:",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Winner",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Control",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Lift",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2 products",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "1 product",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "61%",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "3 products",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2 products",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "44%",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "In other words, offering more than one product on your paywall can increase your conversion rate by more than 60%. And in most cases, offering more than two products will result in a higher conversion rate than offering just two.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Of course, there are a few things to keep in mind. This doesn't take into account how obvious it is that multiple products are available for purchase, some apps hide other payment options behind a \"More Pricing\" button. Nor does it take into account the price or subscription duration of each product, which can obviously have an impact on conversion rates.\n\nIt's also worth considering which product is selected by default, as well as whether or not a trial is available on each product. Trial conversion rates and subscription retention rates can vary significantly depending on which product is being offered.‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "So what's the conclusion? If you need the money to fuel adspend or operating costs, stick to one annual product to get money up front. But if your growth in the short term wouldn't be effected by deferring some revenue, you should offer more pricing options than just one. In most cases, this will result in a higher conversion rate.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Just make sure that your LTV for all three products is the same. Otherwise, you could end up sacrificing long-term growth for short-term gains.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Superwall makes testing incredibly easy",
"nodeType": "text"
}
],
"nodeType": "heading-3"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Instead of hardcoding values, Superwall lets you reference pricing using templates. This makes running a price test as simple as duplicating your paywall and changing the price (no need to update all your text or localizations)",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Superwall’s templates automatically adjust their UI based on how many products you have selected. For example, while selecting 1 product only shows 1 checkout button, selecting 2 or 3 buttons automatically adds a vertical or horizontal product picker which you can customize in the paywall editor.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "ordered-list"
},
{
"data": {
"target": {
"sys": {
"id": "1rKLx6bNfIUs4Tw3ITbEAy",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "That’s all for today, folks! Happy paywalling :)",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2022-11-14"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "68w7Rm80ACEqLiZNeAuU4N",
"type": "Entry",
"createdAt": "2023-11-02T12:26:20.368Z",
"updatedAt": "2023-11-21T20:46:35.889Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 23,
"publishedAt": "2023-11-21T20:46:35.889Z",
"firstPublishedAt": "2023-11-02T12:29:20.090Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 24,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/68w7Rm80ACEqLiZNeAuU4N"
},
"fields": {
"title": {
"en-US": "Growing an app from $0 to $100K MRR"
},
"slug": {
"en-US": "growing-an-app-from-usd0-to-usd100k-mrr"
},
"subtitle": {
"en-US": "built-in-public-1-growing-an-app-from-0-to-100k-mrr"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "6bxhFH8DuA4pRYzFB3lfx5"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "I'm excited to share with you Superwall’s latest blog post series, where I'll be documenting my journey building and growing a new app from scratch. Of course, I'll be using Superwall, our iOS SDK that allows app developers to remotely configure their paywalls and launch experiments. I’ll share tips I learned from growing FitnessAI to over $5M in sales in just under 4 years, scaling its ad-spend to $300,000/mo at its peak, and how I managed to do it almost entirely on my own. I’ll touch on the design tools I used to create ads, the prototyping techniques I used to test features, analytics setups I employed to hold myself accountable, monetization tactics I used to grow revenue and so much more.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Here’s the game plan (what I did for FitnessAI)",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Find an idea ✅",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Build a prototype ✅",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Launch ✅",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "ASO",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Early Signs of Traction",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Establishing KPIs & Analytics Dashboard",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Add a Paywall",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Ads & Scaling",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Monetizing",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Pulling back Ad Spend while maintaining organic traction",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "ordered-list"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "This isn’t the only playbook that works, but it worked well for FitnessAI. When I shut off ads, revenue plateaued at an annual run rate of $800,000 and it held.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "One of the reasons I'm doing this is because I believe building in public is a great way to motivate yourself and others. By sharing my progress and challenges, I hope to both inspire others and learn from their feedback and experiences as well. We believe this so deeply at Superwall that we encourage all of our team members to maintain side projects as a way to better understand the needs of app developers. Unless we understand our customers deeply, we will fail — and the easiest way to ensure this is to encourage our team members to ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
}
],
"value": "become",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " our customers. In fact, our goal is for everyone on the team to make more money from their side projects than from Superwall itself (at least in the short term!).",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Another reason I’m doing this is because I haven't started from scratch in a while, and the last time I did, the landscape was very different. Facebook ads were more profitable and attribution was more reliable. I'm excited to dive in and see what challenges and opportunities await. Hopefully by the end of this, I’ll be more in tune with my inner indie dev and the wonderful community I hope to service with Superwall.‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "You can download my new app ",
"nodeType": "text"
},
{
"data": {
"uri": "https://apps.apple.com/us/app/film-filter/id1659137743"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": " and follow along with my progress in this series. I can’t promise I’ll post too often (I do have a day job) but when I do, I don’t want you to miss it, so subscribe below. What I’ve done so far is publish an MVP on the App Store after around 25 hours of designing and coding. It doesn’t have a paywall and it has no traction (yet!). I’m currently on step 4 in the playbook above.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Deciding what to work on is much simpler than you think. I invite you to disregard how competitive a space is, and instead choose a topic that you're ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
}
],
"value": "very",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " interested in. Starting out, all odds will be against you. It will feel as though it makes no logical sense to enter such a competitive space. The easiest way to combat this is removing logic from the equation. For example, if you’re very interested in fitness, you won’t care how many fitness apps there are on the app store, you’ll simply care that your exact needs at the gym are met. This naiveté will allow you to work disproportionately hard on a project with seemingly low chances of success — and chances are, there are more people like you looking for a very specific app to solve the problem at hand. Be careful though, if you’re too naive, you’ll spend 4 weeks working on button animations that nobody will ever use (been there, done that 💅)",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Personally, my fiancé (🍾) and I have been obsessed with disposable cameras for the past year. We love the look of the photos they produce and the anticipation of waiting for the results. This inspired me to build a fun app that tries to reproduce that candid, disposable camera look. I’ll eventually call it Candid, but in the short term, I want to lean into some keywords optimization so I’ve named it “Film Filter” (more on that below). Even though there are already many photography apps on the market, our passion for disposable cameras motivated me to pursue this project. I know that I’ll work hard on this, not only to impress Roché, but also so we can capture the memories we make together as we begin our lives together. These external & intrinsic motivators will be what keeps me going when things get tough (as I know they will). I really invite you to do the same!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "ASO for new apps",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "When first launching an app, it’s important to lean into ASO, especially if you aren’t comfortable spending on ads to begin with. Here’s a little algorithm to pick a great starter name — search for a competitor on App Figures and see high popularity keywords they rank for. Divide each keyword’s popularity score by its competitiveness score for a popularity to competition ratio. High values will have relatively low competition given its popularity. Next, see if that exact keyword is available on the app store. You can do this easily by trying to create an app in App Store Connect with that exact name. If it’s available, you’ve got a contender. For me, I landed on “Film Filter”. My first goal is to rank organically in the top 10 for this exact search. Originally I started with “Disposable Camera Filter+” because when you begin to search “Disposa” on the app store, “Disposable Camera Filter” is the second suggestion. I had to add the + for uniqueness. Assuming many people tap that suggestion, I hoped an exact match would sling shot my app to the top (it didn’t). To my surprise though, the name “Film Filter” is available so I updated the app’s name and will report back soon.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Regardless, it did 25 installs on day 1.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "As I hinted before, I eventually plan on calling the app Candid (Roché’s idea) but in the short term, ASO is more important. Here are a few more pro tips for early ASO:",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Front load your keywords (exact matches in the beginning of your title and subtitle tend to do better than at the end)",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "keep your name as short as possible — the higher the percentage of the search term that exists in your title or subtitle the better",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Launch with In-App Events — their names get indexed as well (the Major Update type specifically is pretty loosely interpreted by Apple).‍",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "unordered-list"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Next steps…",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "In general, my advice is to add a paywall to your app immediately — but only if you're willing to spend money on ads or if your app has ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
}
],
"value": "some",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " traction. With Candid, my first goal is to eclipse around 100 installs per day organically, which would be a good signal that the app is on the right track. If I don't reach this goal, I'll either start over with a new idea or add more features / tweak my ASO.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Assuming a 10% trial start rate, a 30-40% trial conversion rate and a proven out market, you can expect around $2,625 per month in proceeds on a $29.99/yr product. This amount isn't huge, but it's enough to start experimenting with ads.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Once Candid starts generating ~$50 per day organically, we'll test ads on Apple Search, Facebook/Instagram, and TikTok, each with a $50 per day budget.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "When ads become profitable, we'll keep scaling up while maintaining a positive return on investment. At this point, our goal will be to reach ~100 new trials / subscribers a day while maintaining a return on ad spend (ROAS) of around 1x.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We'll then use a paywall optimization tool like Superwall to run tests, discounts, winback campaigns & sales to push our ROAS up above 1x.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Finally, we’ll scale ads, optimize paywalls, rinse and repeat until Candid ranks organically for a ton of high competition keywords. At that point, we’ll run tests cutting ad-spend while maintaining organic rankings.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "If all goes well, Candid will generate $50-$100K in sales a month, with no spend and we can start over with a new app 🙂",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Until then, sign up below to stay in the loop and ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "tweet this article to motivate me!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": true
},
"date": {
"en-US": "2022-12-13"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "0mSwvh8slNvInqbT74f1D",
"type": "Entry",
"createdAt": "2023-11-02T16:43:22.232Z",
"updatedAt": "2023-11-03T19:55:18.772Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 19,
"publishedAt": "2023-11-03T19:55:18.772Z",
"firstPublishedAt": "2023-11-02T18:43:07.363Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 20,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "page"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/0mSwvh8slNvInqbT74f1D"
},
"fields": {
"title": {
"en-US": "Book a demo"
},
"slug": {
"en-US": "book-a-demo"
},
"subtitle": {
"en-US": "Get a personalized demo of the Superwall platform"
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "What happens next?",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Schedule a demo",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Prepare your demo",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Walk you through Superwall",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Follow up",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "ordered-list"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"section": {
"en-US": "sales"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "7rEYrMdu5sC8xIDv0HTTAz",
"type": "Entry",
"createdAt": "2023-11-03T19:51:25.852Z",
"updatedAt": "2023-12-01T20:56:21.125Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 19,
"publishedAt": "2023-12-01T20:56:09.836Z",
"firstPublishedAt": "2023-11-03T19:54:08.946Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 21,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "page"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/7rEYrMdu5sC8xIDv0HTTAz"
},
"fields": {
"title": {
"en-US": "Talk to sales"
},
"slug": {
"en-US": "sales"
},
"subtitle": {
"en-US": "Get a personalized demo of the Superwall platform"
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "heading-2",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Schedule a sales call",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "We'll prepare a custom demo",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Custom Superwall pricing",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Weekly \"bootcamp\" meetings ",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Shared slack channel",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"section": {
"en-US": "sales"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "7GU0M8amLfE8EZN3scA4Ii",
"type": "Entry",
"createdAt": "2023-11-03T19:55:27.914Z",
"updatedAt": "2023-11-03T20:20:21.236Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 50,
"publishedAt": "2023-11-03T20:20:21.236Z",
"firstPublishedAt": "2023-11-03T20:03:42.565Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 4,
"version": 51,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/7GU0M8amLfE8EZN3scA4Ii"
},
"fields": {
"title": {
"en-US": "Cohort Segmentation, Local Notifications, and Fresh Templates!"
},
"slug": {
"en-US": "paywall-cohort-segmentation-local-notifications-and-fresh-templates"
},
"subtitle": {
"en-US": "Announcing trial-end local notifications and advanced user segment — even across campaigns!"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "fa0B55QTpJNQxjLNMMZaL"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We're back with some noteworthy updates from your friends at Superwall. We’re continuously striving to give you the tools you need to create successful paywall campaigns and improve revenue from your app. This time around, we've got exciting new features, important fixes, and some fresh templates! So, let’s dive right in!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🔔 Trial-End Local Notifications",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Enhance user transparency with the new Trial-End Local Notifications feature. You can now use the paywall editor to schedule timely reminders for your users before their trials expire, ensuring they stay in control of their auto-renewing subscriptions. It's another way to foster trust and enhance the user journey towards conversion at your paywall.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "2UutWNwZGfNkTx8XIOelBC",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🔢 User Cohort Segmentation",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We've introduced ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "user.seed",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " to the Rules Editor – a feature that assigns each user a unique number from 0 to 99, allowing for detailed user cohort segmentation across campaigns. This means you can set rules like \"if user.seed < 50, show variant A, else show variant B\" in one campaign and ensure the same users will see a consistent variant in the next campaign. This new attribute gives you more precise control over your A/B testing and helps optimize your user experiences across campaigns.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "37ZO99OVaKOetDFmrNUCeh",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🔧 iOS 14 Receipt Validation Fix",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We’ve addressed a transaction validation issue for apps using v3.0.2 or higher of the SDK that affected users on iOS 14. Rest assured, this is now fixed in SDK 3.2.0.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "2JNuhhZvMA71bmF9nItmsI",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🕰️ Time-Based Event Tracking",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We've added a series of new features that make your campaign rules even more flexible. You can now use attributes like ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "device.minutesSince_X, device.hoursSince_X, device.daysSince_X, device.monthsSince_X, and device.yearsSince_X",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " in campaign rules and paywalls, where ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "X",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " is any event name. This can include Superwall events, such as ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "app_open",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ", or your own custom events. This enables you to segment your users based on their interactions with specific events, optimizing your paywall display strategy.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "4uAWmyacPVLtmvqzlc9E9S",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "🎨 More Templates & Custom Requests",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We're continuing to expand our template gallery to give you more options for your paywalls. And don't forget, we're always ready to accommodate your specific needs – you can request a custom template anytime from your Dashboard, and we aim to have it ready for you within a week.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We're excited to share these updates and hope they bring you excitement too! As always, we're here to help you navigate your way to success in app monetization. Don’t hesitate to reach out with any questions or feedback. You can reply directly to this email or find us on Twitter ",
"nodeType": "text"
},
{
"data": {
"uri": "https://twitter.com/superwall"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "@superwall",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Happy paywall'ing!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "s5MifNmfnHkrhnf00UZ6c"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-07-25"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "5SAWtjRbfWc1PjrhUUBmWT",
"type": "Entry",
"createdAt": "2023-11-03T19:57:57.920Z",
"updatedAt": "2023-11-03T20:21:10.181Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 14,
"publishedAt": "2023-11-03T20:21:10.181Z",
"firstPublishedAt": "2023-11-03T20:20:01.904Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 15,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/5SAWtjRbfWc1PjrhUUBmWT"
},
"fields": {
"title": {
"en-US": "Introducing: Surveys & Back-to-Back Paywalls"
},
"slug": {
"en-US": "paywall-surveys-and-back-to-back-paywalls"
},
"subtitle": {
"en-US": "It's never been easier to capture real-time feedback or run back to back paywalls"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "45SfUk88au7f7MniHlvcgm"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Your feedback keeps us evolving, and today we have some exciting Superwall updates for you. From capturing real-time feedback on paywalls to enhanced event chaining, there's a lot to explore. Let's get started!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "📊 ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Feedback in Real-Time with Surveys",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Unravel the mystery behind users bypassing your paywall. With Surveys, you can now capture direct feedback when users opt to close your paywall. It's not just about gathering insights to inform product decisions, but also a dynamic opportunity to present another paywall based on the ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "survey_response",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " trigger. Curious to know more? Check out the details ",
"nodeType": "text"
},
{
"data": {
"uri": "https://docs.superwall.com/docs/surveys"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "🚀 ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Boost Conversions with Event-Driven Campaigns",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Leverage the ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "transaction_abandon",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " and ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "paywall_decline",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " events to turn user actions into golden opportunities. These aren't just indicators of user choices – they're the building blocks for crafting dynamic campaign sequences. By chaining these events to other campaigns, you increase the odds of turning interactions into conversions. Learn more about these powerful implicit events ",
"nodeType": "text"
},
{
"data": {
"uri": "https://docs.superwall.com/docs/using-implicit-events"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "📱 ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Mastering Superwall on iOS",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Yusuf Tör, our expert iOS SDK engineer, has distilled all you need to know about integrating Superwall into your iOS app into one ",
"nodeType": "text"
},
{
"data": {
"uri": "https://www.kodeco.com/38677971-superwall-remote-paywall-configuration-on-ios"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "comprehensive tutorial",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": " on Kodeco (formerly Raywenderlich). Whether you're at the cusp of integrating Superwall into your app or seeking advanced tips for optimization, this tutorial is your go-to resource.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "🛠️ ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Enhanced Debugging Capabilities",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Debugging just got a facelift! Now, the ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "code"
}
],
"value": "paywallPresentationRequest",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " event will include all the necessary on-device inputs used in rule evaluations. This clarity ensures that you're never left guessing why a specific paywall displayed (or didn't) based on the campaign rules.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Your success is our priority. As we introduce new features and improvements, our goal remains: to make your app monetization journey streamlined and effective. We're here to support you every step of the way – whether you have questions or just want to share feedback, our inbox is always open. Keep pushing the boundaries of conversion and user satisfaction, and we’ll be back soon with more!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Happy paywall'ing!",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "s5MifNmfnHkrhnf00UZ6c"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-09-29"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "8buSgmHJaVfCRRriQSqQn",
"type": "Entry",
"createdAt": "2023-11-03T20:24:24.168Z",
"updatedAt": "2023-11-03T20:28:08.517Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 20,
"publishedAt": "2023-11-03T20:28:08.517Z",
"firstPublishedAt": "2023-11-03T20:28:08.517Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 21,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/8buSgmHJaVfCRRriQSqQn"
},
"fields": {
"title": {
"en-US": "Superwall for Android is here – SuperWeek"
},
"slug": {
"en-US": "superwall-for-android-is-here-superweek"
},
"subtitle": {
"en-US": "Our first SuperWeek announcement is a big one"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "1IjdaVlh7wxcBkv3t8VnPi"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Today marks an especially exciting milestone — ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Superwall for Android",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "! ",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "🤖 ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Superwall for Android",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We begin SuperWeek by extending the magic of Superwall to Android! Finally, your Android app can enjoy the same top-notch features and seamless experience that our iOS platform has been offering. Effortlessly configure campaigns, A/B test feature gates, and experiment with paywall assignments and pricing to find the highest revenue-generating combination! Get started now and join the Slack community by signing up ",
"nodeType": "text"
},
{
"data": {
"uri": "https://75v4gfh4e3l.typeform.com/to/OJC5qt5k?typeform-source=t.co"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Stay tuned for 4 more days of updates 🎉",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-10-23"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "2W0UdEZvjIZzqwyL57TGT0",
"type": "Entry",
"createdAt": "2023-11-03T20:29:28.551Z",
"updatedAt": "2023-11-03T20:41:13.469Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 48,
"publishedAt": "2023-11-03T20:41:13.469Z",
"firstPublishedAt": "2023-11-03T20:41:13.469Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 49,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/2W0UdEZvjIZzqwyL57TGT0"
},
"fields": {
"title": {
"en-US": "New Campaign Editor"
},
"slug": {
"en-US": "new-campaign-editor"
},
"subtitle": {
"en-US": "It's never been easier to segment your users, run experiments and test your implementation. "
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "mvDQa36V0nz1gB70RJd49"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Campaign Editor Redesign",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "It's SuperWeek Day 2 today we're excited to share a beautifully redone ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "bold"
}
],
"value": "Campaign Editor",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "! Campaigns let you configure ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "who",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " sees ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "what ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "and ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "where! ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "For example:",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "WHO ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "→ Euro users with < 5 paywall views",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "WHAT ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "→ A/B test 2 paywalls",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
{
"type": "italic"
},
{
"type": "bold"
}
],
"value": "WHERE ",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": "→ On App Open, up to 1x per week",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "unordered-list"
},
{
"data": {
"target": {
"sys": {
"id": "71MSy4KeGSw77pjvUCblLy",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "👀 Audience Previews",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "It's hard to know who you're targeting when you build out a rule, so we built a preview right into the Campaign Editor. Now you can quickly gut-check your rules and see what % of active users you're actually targeting.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "70R8jeTA7Gy1BbdNSvtLKw",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "💸 Revenue Charts ",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Powered by data collected by Superwall and ",
"nodeType": "text"
},
{
"data": {
"uri": "https://twitter.com/RevenueCat"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "@RevenueCat",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ", we're now able to surface Revenue Per User, Total Proceeds, Trial Conversion Rate and so much more! Please note some charts are available only to RevenueCat users.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
"target": {
"sys": {
"id": "mvDQa36V0nz1gB70RJd49",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
],
"nodeType": "embedded-asset-block"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-10-24"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "4s58khe9Wb5LBrIqLq5Jt9",
"type": "Entry",
"createdAt": "2023-11-03T20:42:14.877Z",
"updatedAt": "2023-11-03T20:51:51.472Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 29,
"publishedAt": "2023-11-03T20:51:51.472Z",
"firstPublishedAt": "2023-11-03T20:48:31.773Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 30,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/4s58khe9Wb5LBrIqLq5Jt9"
},
"fields": {
"title": {
"en-US": "User Section Redesign"
},
"slug": {
"en-US": "user-section-redesign"
},
"subtitle": {
"en-US": "It's Day 3 of SuperWeek and we have a brand new feature to share. Today it's all about your users 🥳👇"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "6WsUyL8tkHNJ58Px9vLxnr"
}
}
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "We're pleased to unveil the new User Panel. At first we weren't so excited about a new Users section, but we found ourselves obsessed with it. Here's why you'll love it as much as we do: ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Find users who just triggered ANY event, even your own custom events ⚡️",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Quickly reference event properties to use in Audience rules 📘",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Double check integrations like RevenueCat are forwarding events properly 🔩",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Debug any user by their ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "id",
"marks": [
{
"type": "code"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " to see why they did (",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "or didn't",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": ") see a paywall 🧐",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Find device and user properties quickly A beautiful design, because we care 🎨",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Demo",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "6bCmSZ6MJ1U3vmMtza1lSn",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-10-25"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "6GTUcxcnSIzkzycN2QP9Hz",
"type": "Entry",
"createdAt": "2023-11-03T20:52:47.498Z",
"updatedAt": "2023-11-03T20:58:41.336Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 34,
"publishedAt": "2023-11-03T20:58:41.336Z",
"firstPublishedAt": "2023-11-03T20:57:23.219Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 2,
"version": 35,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/6GTUcxcnSIzkzycN2QP9Hz"
},
"fields": {
"title": {
"en-US": "Automatic Localization – Crowdin & Lokalise integrations"
},
"slug": {
"en-US": "automatic-paywall-localization-guide-crowdin-and-lokalise-superwall-integrations"
},
"subtitle": {
"en-US": "It's day 4 of SuperWeek and we have some worldly new features to share 🌎"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "7L5ptBlEFjk6DEPjaZainV"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "At Superwall we empower you to grow your apps by giving you super powers. We build for you because you build our future – the whole world's future. Well, it's hard to make good on that promise if we don't all speak the same language.\n\nThat's why today we're especially honored to announce integrations with 2 major localization platforms — ",
"nodeType": "text"
},
{
"data": {
"uri": "http://crowdin.com"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Crowdin",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": " and ",
"nodeType": "text"
},
{
"data": {
"uri": "https://lokalise.com"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Lokalise",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ". \n\nFrom now on, translating your paywalls to other languages is effortless — ",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Turn on the integration",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Add your API key to Superwall and ",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Watch all your paywalls automatically queue up for translation.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "ordered-list"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "We're very excited to make good on our promise to help you crazy ones — now make us proud. Make good on your promise. Go change the world.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-10-26"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "2xS0v7tw2GDRbB7cp0VAFE",
"type": "Entry",
"createdAt": "2023-11-03T20:59:06.443Z",
"updatedAt": "2023-11-09T16:57:31.605Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 65,
"publishedAt": "2023-11-09T16:57:31.605Z",
"firstPublishedAt": "2023-11-03T21:06:40.709Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 6,
"version": 66,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/2xS0v7tw2GDRbB7cp0VAFE"
},
"fields": {
"title": {
"en-US": "New Pricing & Superwall's Manifesto"
},
"slug": {
"en-US": "superwall-new-pricing-and-superwall-manifesto"
},
"subtitle": {
"en-US": "Our manifesto 🧘 the reason we're building Superwall runs deep – it starts with making Superwall cheaper today."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "BUlU8rgc2CtmRfdp4Kd7F"
}
}
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "heading-2",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Our manifesto 🧘",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "AWS gives you the power to scale. It reduces your barrier to build an app like facebook from “can you operate data centers?” to “can you apply for a credit card?”.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "The App Store gives you the power of distribution. It reduces your barrier to build viral software from “can you build the new iPhone?” to “can you get past app review?”.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Superwall gives you the power to monetize. It reduces your barrier to build a business from “can you make money?” to “can you design a good product?“.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Why is this so important?",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It matters because today’s reward system is broken. It rewards apps with the best monetization – not the best product, and that is a shame.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s a shame everyone has Apple’s distribution, but only the best monetized apps are in everyones pockets.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s Superwall’s mission to change that.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "We promise to give you super powers so you can focus on honing your craft and challenging the status quo. We build for you, so you can build for them.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://citizen.com/"
},
"content": [
{
"nodeType": "text",
"value": "Citizen",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " fight crime.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://www.photoroom.com/"
},
"content": [
{
"nodeType": "text",
"value": "PhotoRoom",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " sell online. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://poly.cam/"
},
"content": [
{
"nodeType": "text",
"value": "Polycam",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " build homes. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://mojo-app.com/"
},
"content": [
{
"nodeType": "text",
"value": "Mojo",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " tell stories. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://www.yubo.live/"
},
"content": [
{
"nodeType": "text",
"value": "Yubo",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " make friends. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://hornet.com/"
},
"content": [
{
"nodeType": "text",
"value": "Hornet",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " find dates. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://rapchat.com/"
},
"content": [
{
"nodeType": "text",
"value": "Rapchat",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " write music. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we help ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://playbackbone.com/app/"
},
"content": [
{
"nodeType": "text",
"value": "Backbone",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " have fun.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It’s why we’ll help you change the world, too.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "hr",
"data": {
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Today concludes SuperWeek, our week-long event where we released a brand new feature every single day. Our last reveal is not so much a feature, but a gift.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Starting today, your first 250 paywall conversions/month are 100% free of charge. This small step makes good on our mission to empower developers – regardless of their budget – to build huge businesses. Because we believe in the power of great products, not just deep pockets. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Welcome to the new era of monetization, where your product and your vision lead the way.",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2023-10-27"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "6e9ClmKDyitNq32YvYPwxI",
"type": "Entry",
"createdAt": "2023-11-06T20:00:47.646Z",
"updatedAt": "2025-12-09T21:07:02.706Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 152,
"publishedAt": "2025-12-09T21:07:02.706Z",
"firstPublishedAt": "2023-11-06T20:06:01.786Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"publishedCounter": 6,
"version": 153,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"fieldStatus": {
"*": {
"en-US": "published"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/6e9ClmKDyitNq32YvYPwxI"
},
"fields": {
"title": {
"en-US": "Apple Payment Dates – When App Store Payments Are Sent in 2026"
},
"slug": {
"en-US": "apple-payment-dates-when-app-store-payments-are-sent"
},
"subtitle": {
"en-US": "A new year is afoot! Reference this handy list to understand when payments are sent and what sales dates they reflect."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "1Z9EWrFBITAgUIkqn47Bqf"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Navigating Apple's fiscal calendar can be a bit of a maze if you're not familiar with its (highly) custom payment schedule, which is markedly obscure. As a business depending on revenue generated on the App Store, understanding these dates is crucial and this handy little reference is for you.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2026 App Store Payment Dates & Fiscal Calendar",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Payment Date",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Quarter",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales Start",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales End",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 4, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 28, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 1, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 2, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": " 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 29, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 29, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 30, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 27, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 5, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 28, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 31, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 2, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 1, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 28, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 30, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 1, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 28, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 4, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 29, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 2, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 2, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 3, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 30, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 30, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 31, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 27, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 3",
"nodeType": "text"
},
{
"data": {
},
"marks": [
],
"value": ", 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 28, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 1, 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "How Apple's Payment Schedule Works",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apple's method involves the following oddities:",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "a fiscal year of 364 days",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "four quarters with one 35-day and two 28-day fiscal months",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "every 5 years (or so) Apple introduces an additional week (to sync up calendar years)",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "payment 33 days after a fiscal month ends",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "November payouts are sometimes early",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "list-item"
}
],
"nodeType": "unordered-list"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "People speculate (conspire?) as to why November’s payment comes early, the running theory is to inflate end of year revenue.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "FAQ - Apple’s Fiscal Calendar & Payment Dates",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "How often does Apple pay developers?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "12 times a year, typically 33 days after the end of the previous period.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Is there an official apple resource detailing this information?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apple maintains a fiscal calendar inside of App Store Connect ",
"nodeType": "text"
},
{
"data": {
"uri": "https://appstoreconnect.apple.com/WebObjects/iTunesConnect.woa/wa/jumpTo?page=fiscalcalendar"
},
"content": [
{
"data": {
},
"marks": [
],
"value": "here",
"nodeType": "text"
}
],
"nodeType": "hyperlink"
},
{
"data": {
},
"marks": [
],
"value": ".",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Are there any requirements to receive payments from Apple for App Store generated revenue?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "To receive payments for your app or in-app purchases from Apple, make sure you have a Paid Applications Agreement in effect, provide your banking information in App Store Connect, exceed the minimum monthly payment threshold for each region, and fulfill any invoicing requirements. Meeting these requirements ensures timely payments for your app or in-app purchases.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Does Google pay out in a similar way? Are payments date aligned?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apple and Google have different payout schedules for developers. Apple typically pays developers 33 days after the end of the fiscal month, while Google initiates payouts on the 15th of each month for the previous month's sales. For example, if your app had sales in January, Google would initiate the payout on February 15. Please keep in mind Google does not process merchant payouts on weekends or public holidays, which may cause a slight delay in receiving payments.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Are payment dates the same everywhere in the world?",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "blockquote"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Yes, for the most part. The dates you receive them may change based on local bank holidays and processing times.",
"nodeType": "text"
}
],
"nodeType": "paragraph"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Previous Payment Dates",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2025 App Store Payment Dates & Fiscal Calendar",
"nodeType": "text"
}
],
"nodeType": "heading-2"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Payment Date",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Quarter",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales Start",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales End",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 5, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 29, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 2, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 3, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 30, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 30, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 1, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 28, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 6, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 29, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 1, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 3, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 1, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 1, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 29, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 5, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 30, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 3, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 3, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 4, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 31, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 31, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 1, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 28, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 4, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 29, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 2, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 3, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 30, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 30, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2026",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 31, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 27, 2025",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2024 App Store Payment Dates & Fiscal Calendar",
"nodeType": "text"
}
],
"nodeType": "heading-3"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Payment Date",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Quarter",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales Start",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales End",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 7, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 1, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 4, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 5, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 1, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 3, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 30, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 7, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 31, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 3, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 2, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 2, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 3, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 30, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 6, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 31, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 5, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 1, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 1, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 2, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 29, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 5, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 30, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 3, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 3, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 4, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 31, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 7, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 1, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 28, 2024",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2023 App Store Payment Dates & Fiscal Calendar",
"nodeType": "text"
}
],
"nodeType": "heading-3"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Payment Date",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Quarter",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales Start",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales End",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 1, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 25, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 29, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 29, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 30, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 26, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 31, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 9, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 1, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 4, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 6, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 5, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 4, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 4, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 5, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 1, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 8, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 6, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 6, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 7, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 3, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 3, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 4, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 1, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 7, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 5, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 5, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 6, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 2, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 3, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 30, 2023",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "2022 App Store Payment Dates & Fiscal Calendar",
"nodeType": "text"
}
],
"nodeType": "heading-3"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Payment Date",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Quarter",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales Start",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sales End",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-header-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 2, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 26, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 30, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 30, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 31, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 27, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q1 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Nov 28, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 25, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 3, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Dec 26, 2021",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 29, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 31, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jan 30, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 26, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 28, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q2 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Feb 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 26, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 2, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Mar 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Apr 30, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 30, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 1, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 28, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 28, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q3 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "May 29, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 25, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 1, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jun 26, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 30, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 29, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Jul 31, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Oct 27, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Q4 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Aug 28, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
},
{
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "Sep 24, 2022",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "table-cell"
}
],
"nodeType": "table-row"
}
],
"nodeType": "table"
},
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
},
"updatedPostPublishDate": {
"en-US": "2025-12-09"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "company"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "4sTy55YDvSXAESYWU5soyQ",
"type": "Entry",
"createdAt": "2023-11-21T20:43:46.681Z",
"updatedAt": "2023-11-22T12:09:50.689Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 207,
"publishedAt": "2023-11-22T12:09:50.689Z",
"firstPublishedAt": "2023-11-21T22:44:57.782Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 3,
"version": 208,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/4sTy55YDvSXAESYWU5soyQ"
},
"fields": {
"title": {
"en-US": "Confidence Intervals in Experiment Readouts"
},
"slug": {
"en-US": "confidence-intervals-in-experiment-readouts"
},
"subtitle": {
"en-US": "You can now see confidence intervals and a win percent for each variant within an experiment"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "4Lfsv4OsDcE3t9zgapw1aI"
}
}
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "So you finally launched an experiment and are eagerly checking Superwall's dashboard for results ... we've all been there :) ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Two questions will inevitabley come to mind:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "When can I consider an experiment finished?",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "How much did our conversion rate increase?",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "These seemingly innocent questions actually require a ton of complicated math to answer. Until now, most customers resorted to using external AB testing calculators but we knew we could do better. Starting today, you'll see 2 new columns in an experiment's readout table:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "1ABpRxnG4Xe8FwjzL9w9Md",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Here's what they tell you:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "ordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Win %",
"marks": [
{
"type": "bold"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " — This new column uses ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/share/9ceccc5f-3c93-4fd4-b110-e8594b91b7a4"
},
"content": [
{
"nodeType": "text",
"value": "Bayesian inference",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " to determine a winner. Unlike traditional methods that just give you a snapshot, Bayesian inference continuously updates the winning probability as new data comes in. This means you get a dynamic view of which variant is leading, incorporating all the data collected up to the current moment. This approach is more intuitive and reflects real-time insights into your experiment's performance.",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Confidence Intervals",
"marks": [
{
"type": "bold"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " — On the other hand, the Confidence Interval column is grounded in the frequentist approach. It provides a range within which we are 95% confident the true conversion rate lies. This is crucial for understanding the reliability of your results. If the confidence intervals of two variants do not overlap, it's a strong indicator that you have a statistically significant difference. It's a more traditional approach but extremely powerful in determining the certainty of your results.",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "So how can we answer our first 2 questions?",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "blockquote",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "When can I consider an experiment finished?",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "You know your experiment is complete when your Win % is greater than or equal to 95%. Superwall places a crown next to a variant when it gets there, but feel free to call it quits earlier if it makes good business sense. Remember – running more experiments should be your #1 priority.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "blockquote",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "How much did our conversion rate increase?",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "It's easy to forget how important this question is – especially when you are spending money on ads. Since a higher conversion rate changes the unit economics of your business, you need accurate data to scale ad-spend properly when a winner is declared. To be super conservative, consider your conversion rate ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "might be",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " at the lower bound of the 95% confidence interval. Ask yourself if you can stomach spend in this worst case scenario before scaling.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "With these two powerful tools at your disposal, you'll have a clearer, more comprehensive understanding of your experiments. No more guesswork or external calculators; just solid, data-driven insights right at your fingertips. ",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Happy monetizing!",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "HsLyyvHzeoItbESDyweim"
}
}
},
"hidden": {
"en-US": false
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "4y9dVpaLvHlXFDgM4TkVuq",
"type": "Entry",
"createdAt": "2024-01-17T22:00:58.196Z",
"updatedAt": "2024-01-17T22:02:00.188Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 6,
"publishedAt": "2024-01-17T22:02:00.188Z",
"firstPublishedAt": "2024-01-17T22:02:00.188Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"publishedCounter": 1,
"version": 7,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "member"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/4y9dVpaLvHlXFDgM4TkVuq"
},
"fields": {
"name": {
"en-US": "Jordan Morgan"
},
"slug": {
"en-US": "jordan-morgan"
},
"title": {
"en-US": "Developer Advocate"
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "5uGOdbizooxFBP9eC9vFp3"
}
}
},
"email": {
"en-US": "jordan@superwall.com"
},
"twitter": {
"en-US": "JordanMorgan10"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "OsrCqSntxeYdnbEXnVlir",
"type": "Entry",
"createdAt": "2024-01-17T22:03:00.919Z",
"updatedAt": "2024-01-19T21:10:40.471Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 28,
"publishedAt": "2024-01-17T23:39:14.885Z",
"firstPublishedAt": "2024-01-17T23:32:21.744Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"publishedCounter": 2,
"version": 30,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "3Kt0l2x0ToLXIpZ5fCXxvt"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/OsrCqSntxeYdnbEXnVlir"
},
"fields": {
"title": {
"en-US": "Apple allows external payment links in the App Store – everything you need to know"
},
"slug": {
"en-US": "apple-allows-external-payment-links-in-the-app-store-everything-you-need-to"
},
"subtitle": {
"en-US": "Apple now allows links to external payment options outside of your app, sort of. Here's what the ruling means, and how it all works in practice."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "2zH8UaNMOOVlvBDnda80Zc"
}
}
},
"body": {
"en-US": {
"nodeType": "document",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "In response to the Supreme Court’s ruling in the sprawling ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "Epic Games v Apple",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " case, developers can now link outside of their apps to external payment methods. So, do developers finally have a viable avenue to bypass Apple’s 30% (or 15%, for Apple’s App Store Small Business Program) commission fee?",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Well yes, but also no. In fact, it’s a little complicated to understand the net effect of the ruling from a developer’s standpoint.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "So, we’re here to break it down for you. First, we’ve got to understand what the ruling actually means. Then, we can see how Apple went about complying with it. If you were hoping for a way to place a link to your app’s website to use something like Stripe Checkout, well - it’s not quite that simple.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "What the Ruling States",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "While Apple largely won the case, there was one critical area where the courts ruled in favor of Epic Games. Particularly, Apple’s anti-steering rules. Put simply, this means apps should have the ability to link to outside payment processors, as opposed to Apple steering them to only use their in-app purchase flows. Today, to offer any subscription, you are probably keenly aware of the options here - use Apple’s StoreKit APIs, and that’s it. Anything else will lead to a rejection of your app’s submission.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "But after this ruling? Well, you ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "should",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " be able to do things like direct a user to your website to sign up for a subscription. Again, by the definition of the ruling, this is a flow that will be supported going forward.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Does that mean as of today, you can submit an app with a link to your website to offer more competitive prices on your paywall? The simple is no, you can’t. How this works in practice is so complicated that I doubt few developers will actually link to external providers. Plus, as we’ll see - if Apple’s rules are followed to the letter, it’ll likely end up being ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "more",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " expensive to do it this way.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "How Linking to External Payments Works",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Apple updated App Store Review ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://developer.apple.com/news/?id=plt8qzea"
},
"content": [
{
"nodeType": "text",
"value": "Guideline 3.1.1 today,",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": " which introduced the StoreKit Purchase Link Entitlement. So, to start, a brand new entitlement must be granted to even begin linking out to other payment providers. In fact, there are several steps that are required to use external payment links. To understand how it works, it’s easiest to list out all of the requirements to explain how you’d even do it.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "To start, you have to meet some qualifications to apply for the entitlement. Those are, your app must:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Be available on the iOS or iPadOS App Store in the United States storefront;",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Offer in-app purchases when distributed through the iOS or iPadOS App Store in the United States storefront; and",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Not participate in the Video Partner Program or News Partner Program.",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "After you receive confirmation from Apple that the entitlement has been granted, then you’ll need to:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Configure your App ID in Certificates, Identifiers & Profiles to support the entitlement;",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Update your project with the entitlements plist file, and also your ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "info.plist ",
"marks": [
{
"type": "code"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": "file to list the entitlement and metadata.",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "The ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "info.plist",
"marks": [
{
"type": "code"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " file is where you’ll actually enter in the URL to your external purchasing page. Since this is a static URL, you won’t be able to use any sort of parameters for it. That’s quite a barrier to entry, since many of the advantages of using web-based checkouts is that you can offer discounts, personalized offers and other similar offerings based on certain parameters. Here, it’s the same URL for everybody.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "If you settle on a link, then you have to take care to style it according to Apple. Among those requirements? It has to use a plain button style. That means there can’t be a fill color, background or have any shape around it. Finally, you’ll need to use the “link out icon” symbol to the right of the URL.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "The next requirement deals with the actual copy. It appears the guidelines state that developers can’t simply use whatever copy might make the most sense, but rather - you use a template provided by Apple. Here’s what you’ve got to choose from (keep in mind each of these would need the link-out icon at the end):",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Purchase template:",
"marks": [
{
"type": "bold"
}
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Purchase from the website at ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Special offer template:",
"marks": [
{
"type": "bold"
}
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "For special offers, go to ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "For a special offer, go to ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Lower price template:",
"marks": [
{
"type": "bold"
}
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Lower prices offered on ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Lower price offered on ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Percent off template:",
"marks": [
{
"type": "bold"
}
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "To get XX% off, go to ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Specific price template:",
"marks": [
{
"type": "bold"
}
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Buy for $X.XX at ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://chat.openai.com/g/www.example.com"
},
"content": [
{
"nodeType": "text",
"value": "www.example.com",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": "",
"marks": [
],
"data": {
}
}
]
}
]
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Here’s an example of what the styling and copy might look like:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "2WXmFqprFX5bAJIrzPwMMq",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Now that we’ve:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "unordered-list",
"data": {
},
"content": [
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Applied for an entitlement",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Setup Xcode with it",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Settled on a static URL",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Styled the button for the URL appropriately",
"marks": [
],
"data": {
}
}
]
}
]
},
{
"nodeType": "list-item",
"data": {
},
"content": [
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "And, used any of the above template copy",
"marks": [
],
"data": {
}
}
]
}
]
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "…we’re still not done.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Developers can only show this link in particular places. You’d think that your paywall would be the perfect fit for this, but it seems they aren’t in compliance. Specifically, Apple states that “",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "one app page the end user navigates to (not an interstitial, modal, or pop-up), in a single, dedicated location on such page, and may not persist beyond that page.",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": "” can be used. That means it has to be placed outside of your paywall, on a single page and only on that single page.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Finally, before that link is shown - there’s API you have to call to present this modal warning first:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "4hhlWAyD2IZl0amLIoGsSo",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "After all of that, the user will end up at your external payment destination. You might think that would be worth the trouble to save on commission, but I haven’t arrived at the trickiest part of the guidelines. That’s the commission you’ll have to still pay Apple.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "The Real Cost",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Apple says that you’ll still need to pay a 27% commission on any resulting transactions from external links. If you're in the Small Business Program, that drops to 12%. Now, when you take into consideration any processing fees from your payment provider (and, of course, taxes) you’re likely over the results 30% you’d pay from using in-app purchases.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "What’s more, Apple requires you to submit your transactions over to them within 15 calendar days. That holds true even if you had no transactions. This isn’t a simple list of transactions either, these are in-depth reports with dates, amounts, app identifier and more. Here’s an example from Apple on what they expect:",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "embedded-asset-block",
"data": {
"target": {
"sys": {
"id": "50jVceMS2sNrGl2vAKCWIK",
"type": "Link",
"linkType": "Asset"
}
}
},
"content": [
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Apple notes that there may API to report these in the future. And, if that ever happens, you’ve got 30 days to implement it within your app — or you’ll face rejection. If you miss payments, then you’ll owe interest at the rate of one percent (1%) per month or the highest rate permitted by law, whichever is less. After all of that, you’re also subject to Apple auditing your transactions. If they find any discrepancy, they can either terminate you from the Apple Developer Program or withhold the amount from your App Store payments.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "As we said, it’s not as simple as providing a link to your external website or payment portal. Apple has the whole process locked down end-to-end.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "heading-3",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "Wrapping Up",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "If you’re wondering if Apple wants you to this, it’s fairly clear the answer is no. While the court of law can shift some of these requirements, time will tell if that will actually happen. You’re likely best off using traditional in-app purchase methods unless anything here changes. If it does, we’ll be sure to update this post.",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "At the end of the day, developers have to carefully consider one fundamental question: What is the best way to make money on the App Store?",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "paragraph",
"data": {
},
"content": [
{
"nodeType": "text",
"value": "I don’t think a lot of us will arrive at Apple’s solution outlined here. The days of using something ",
"marks": [
],
"data": {
}
},
{
"nodeType": "text",
"value": "other",
"marks": [
{
"type": "italic"
}
],
"data": {
}
},
{
"nodeType": "text",
"value": " than in-app purchase APIs isn’t soon on the horizon. Either way, we’re here to help. Whether your paywall uses an external link in the future, or StoreKit APIs — you can test and optimize all of those things with Superwall. You can get started with a free account today by visiting this ",
"marks": [
],
"data": {
}
},
{
"nodeType": "hyperlink",
"data": {
"uri": "https://www.superwall.com/signup"
},
"content": [
{
"nodeType": "text",
"value": "link",
"marks": [
],
"data": {
}
}
]
},
{
"nodeType": "text",
"value": ".",
"marks": [
],
"data": {
}
}
]
}
]
}
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "4y9dVpaLvHlXFDgM4TkVuq"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2024-01-17"
}
}
},
{
"metadata": {
"tags": [
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "6s1TT2X3ShmSE8pDXruTfB",
"type": "Entry",
"createdAt": "2024-01-19T21:23:22.393Z",
"updatedAt": "2025-03-06T18:01:08.823Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 265,
"publishedAt": "2025-03-06T18:01:08.823Z",
"firstPublishedAt": "2024-02-13T16:56:33.588Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"publishedCounter": 17,
"version": 266,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"fieldStatus": {
"*": {
"en-US": "published"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/6s1TT2X3ShmSE8pDXruTfB"
},
"fields": {
"title": {
"en-US": "Integrating Superwall in your iOS app"
},
"slug": {
"en-US": "getting-started-with-superwall-in-your-indie-ios-app"
},
"subtitle": {
"en-US": "If you've got just under 10 minutes free, I'll get you up and running with our testable paywalls."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "59Ya06Sj9sL3tmmDfjIHQQ"
}
}
},
"markdownBody": {
"en-US": "### Want to deploy testable paywalls without submitting updates? Or, run several paywall designs concurrently? Superwall has you covered, let's see how.\nGetting up and running with Superwall is a quick, three step process. As someone who has used countless SDKs, I know that sometimes you simply want a to-the-point walk through of how to get started. If that’s you, you're in the right place.\n\nToday, I’m going to take you through those three steps — beginning to end. In a fictional caffeine tracking app, we'll present a paywall when someone taps the blue button to log caffeine. Here's where we'll end up:\n\n![Paywall Presentation in Indie iOS App](//images.ctfassets.net/3k7cygmwfm7x/3N4mut2cZwIv3C9t36gm63/30c3420dca9f4729f6acea6287240a84/Screenshot_2024-02-20_at_11.07.46_PM.png)\n\nTo get there, we’ll need to do the following:\n\n1. Install the Superwall SDK.\n2. Configure the SDK in our app.\n3. Present a paywall by registering a placement.\n\nBefore we get started, I want to point out that this quick start guide does assume two things:\n\n1. That you’ve already setup your subscriptions in App Store Connect and Superwall. \n2. You have a Superwall account.\n\nIf you aren't there yet, no worries! Sign up for a free account (you can do that at the bottom of this post), and then follow our [guide to setup products](https://superwall.com/docs/products). Also, if you'd like to see a sample app with our SDK fully integrated, check out our [sample projects](https://github.com/superwall-me/Superwall-iOS/tree/develop/Examples).\n\nFirst up, let’s get Superwall into your app!\n\n### Step One: Install the SDK\nYou can install our SDK using two different methods. We support Swift Package Manager and Cocoapods. I'll show you how to do both below (we also have a video over it you can watch [here](https://www.youtube.com/watch?v=geTHOGyL_60)).\n\nUsing Swift Package Manager:\n1. In Xcode, choose `File -> Add Package Dependencies...`.\n2. In the new window, paste this into the search bar you’ll see at the top right: `https://github.com/superwall-me/Superwall-iOS`.\n3. Select `Superwall-iOS`, and set the dependency rule as `Up To Next Major` Version, and the minimum version to `4.0.0`.\n4. Click `Add Package`.\n5. Make sure your app is selected on the left hand side under `Add to Target`. Click `Add Package` again.\n\nUsing Cocoapods:\n1. Ensure your project is setup with Cocoapods first (i.e. you have a podfile already). If you don’t - check out their guide [here](https://guides.cocoapods.org/using/getting-started.html).\n2. In your podfile, add Superwall: `pod 'SuperwallKit', '< 5.0.0'`.\n3. Then, open Terminal and navigate to the location of your podfile (`$cd documents/my-awesome-project`).\n4. Run `pod repo update` to make sure your local spec repo is up to date.\n5. Run `pod install`.\n6. Finally, ensure your target's **Build Settings -> User Script Sandboxing** is set to No.\n\nAt this point, no matter if you used Swift Package Manager or Cocoapods, Superwall’s SDK should be in your project. Take a minute to make sure everything is building just fine. If you’ve hit a snag, don’t hesitate to [ask me for help](https://www.twitter.com/jordanmorgan10).\n\n### Step Two: Configure Superwall\nNext, we’re going to setup Superwall in our app. We want to initialize Superwall early on in your app’s life cycle. Here are some recommended approaches:\n\n- In UIKit , use `application(_:didFinishLaunchingWithOptions:)` inside your application delegate.\n- For SwiftUI , use the `init` of your Struct conforming to the `App` protocol works.\n\nGetting Superwall ready is as easy as calling one function and passing in your API key. If you don’t know your API key, you can find yours in the Superwall dashboard under `Settings->Keys->Public API Key`.\n\nFrom there, calling `configure(apiKey:)` is all that we have to do:\n\n```swift\nimport SwiftUI\nimport SuperwallKit\n\n@main\nstruct MyApp: App {\n\n init() {\n // Use your own API key here\n Superwall.configure(apiKey: \"YOUR_API_KEY\")\n }\n\n var body: some Scene {\n WindowGroup {\n ContentView()\n }\n }\n}\n```\n\nNow, we can interact with Superwall to show paywalls and more. Out of the box, we’ll handle all of the basic subscription-based logic for you. However, if you need fine grain control or want to use an existing service such as Revenue Cat, we support that too. Check out how to use our `PurchaseController` [here](https://superwall.com/docs/using-revenuecat).\n\n### Step Three: Present a Paywall\nNow comes the fun part - presenting a paywall! \n\nWith Superwall, we can certainly show a paywall arbitrarily, from a button tap or anything else. But, I want to quickly explain the methodologies behind our SDK.\n\nWith Superwall, paywalls are typically shown based off of placements you create for a given campaign. Each campaign corresponds to one (or several!) paywalls. At its core, a placement is anything in your app that might merit being a paid feature, otherwise known as being ‘paywalled”. For example, in a caffeine tracking app, some placements might be:\n\n1. When a user logs caffeine, `caffeineLogged` .\n2. Or, possibly setting a custom icon, `customIconSelected`.\n\nThis approach is incredibly flexible, because now we can do things dynamically — such as paywalling a particular feature. Continuing our example, if entering in caffeine should be a pro feature - Superwall can ensure a paywall is shown for non-pro users when they attempt to do some logging. If they are pro, we'll simply log the caffeine:\n\n```swift\nButton(\"Log\") {\n Superwall.shared.register(placement: \"caffeineLogged\") {\n store.log(amountToLog)\n }\n}\n```\n\nIf you've followed our [Caffeine Pal project from our StoreKit 2 post](https://superwall.com/blog/make-a-swiftui-app-with-in-app-purchases-and-subscriptions-using-storekit-2), you might notice how the logic has become even simpler to paywall features now. Here's what what we did using traditional methods, without Superwall:\n\n```swift\nButton(\"Log\") {\n if storefront.hasCaffeinePalPro {\n store.log(amountToLog)\n } else {\n showPaywall.toggle()\n }\n}\n```\n\nOut of the box, we provide a campaign with a corresponding placement (`campaign_trigger`) to test things out. You can use that for demonstration purposes. However, it's best practice to get your campaigns up and running early — so I would advise setting up a placement that you'll actually use (even when in the testing phase).\n\n### Finishing Up\nIn just a few steps, we’ve installed Superwall and presented a remotely configurable paywall. But, cliché as it sounds, that’s just the start of what you can do.\nWant to dig in further? Check these links out:\n\n1. [A demo app using Superwall alongside RevenueCat](https://github.com/superwall-me/Superwall-iOS/tree/develop/Examples/UIKit%2BRevenueCat).\n2. [Learn how to preview paywalls before going live](https://superwall.com/docs/interactive-paywall-preview).\n3. [Performing in-app actions from button taps in your paywalls](https://superwall.com/docs/custom-paywall-events).\n4. Or, visit our [documentation](https://superwall.com/docs/home) or [YouTube channel](https://www.youtube.com/@SuperwallHQ) to learn more!\n\nIf you got stuck along the way or have any other questions or feedback, reach out to [me on Twitter](https://www.twitter.com/jordanmorgan10)! I'm more than happy to help, and all of us at Superwall are excited to see what you can do with our SDK."
},
"author": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "4y9dVpaLvHlXFDgM4TkVuq"
}
}
},
"hidden": {
"en-US": false
},
"date": {
"en-US": "2024-02-15"
},
"updatedPostPublishDate": {
"en-US": "2025-03-06"
}
}
},
{
"metadata": {
"tags": [
{
"sys": {
"type": "Link",
"linkType": "Tag",
"id": "engineering"
}
}
],
"concepts": [
]
},
"sys": {
"space": {
"sys": {
"type": "Link",
"linkType": "Space",
"id": "3k7cygmwfm7x"
}
},
"id": "7jYgvbtP2XjcadGPfGxq6f",
"type": "Entry",
"createdAt": "2024-01-22T15:12:11.990Z",
"updatedAt": "2024-02-07T02:17:13.512Z",
"environment": {
"sys": {
"id": "master",
"type": "Link",
"linkType": "Environment"
}
},
"publishedVersion": 1041,
"publishedAt": "2024-02-07T02:17:13.512Z",
"firstPublishedAt": "2024-02-01T20:01:54.286Z",
"createdBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"updatedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"publishedCounter": 40,
"version": 1042,
"publishedBy": {
"sys": {
"type": "Link",
"linkType": "User",
"id": "6M5Rjhleba9h6vT35g8w6G"
}
},
"automationTags": [
],
"contentType": {
"sys": {
"type": "Link",
"linkType": "ContentType",
"id": "post"
}
},
"urn": "crn:contentful:::content:spaces/3k7cygmwfm7x/environments/master/entries/7jYgvbtP2XjcadGPfGxq6f"
},
"fields": {
"title": {
"en-US": "StoreKit 2 Tutorial with Swift UI - How to add In-App Purchases to your app"
},
"slug": {
"en-US": "make-a-swiftui-app-with-in-app-purchases-and-subscriptions-using-storekit-2"
},
"subtitle": {
"en-US": "With Swift and the new Observation framework, setting up subscriptions for your iOS app is easier than ever. We'll show you how from beginning to end."
},
"image": {
"en-US": {
"sys": {
"type": "Link",
"linkType": "Asset",
"id": "36lwLpIhWEQz2BQdk4R9N3"
}
}
},
"body": {
"en-US": {
"data": {
},
"content": [
{
"data": {
},
"content": [
{
"data": {
},
"marks": [
],
"value": "*",
"nodeType": "text"
}
],
"nodeType": "paragraph"
}
],
"nodeType": "document"
}
},
"markdownBody": {
"en-US": "## Make a SwiftUI App with In-App Purchases and Subscriptions using StoreKit 2\n*Learn StoreKit 2 from top to bottom with our demo app, Caffeine Pal:*\n![Caffeine Pal Video Teaser](//videos.ctfassets.net/3k7cygmwfm7x/55cV3Gr5X48jsbe5wdnZEa/0a70bedd9e2a04e3d8d5acd69908712c/SuWhU2gEUUuKgBNU.mp4)\nStoreKit 2 is Apple's modern approach to handling any sort of purchasing flow in your app. And, that goes for any app in Apple's ecosystem. It works for iOS, iPadOS, tvOS, visionOS, watchOS, macOS and Mac Catalyst. Instead of thinking of delegates and callbacks, StoreKit 2 takes a modern, Swift-first approach and leverages language features such as Swift concurrency.\n\nWhether you want to offer a subscription or any in-app purchase, StoreKit 2 is the right tool for the job. Today, I'll show you how to use it by covering all of the fundamental concepts so that once you're done reading this — you'll be ready to implement in-app purchases on your own. For example, I'll show you how to:\n\n- Purchase products.\n- Fetch available products.\n- Display localized prices.\n- Test out purchasing products.\n- How to integrate your existing models with StoreKit, and\n- How all of this works in a modern, SwiftUI codebase.\n\nDon't worry if you've never written a line of StoreKit code, I think you'll find it's fairly easy to get started. And, I'll explain everything as we go. First, let me introduce you to the world's finest, most robust (and completely fake) caffeine tracking app; Caffeine Pal!\n\n![Caffeine Pal Sizzle](//images.ctfassets.net/3k7cygmwfm7x/2l83a8Qjc9OsTNGADkKAYH/fa36ee29e7f5551a3d8eb679156bec67/cp1.jpg)\n\nCaffeine Pal is where we will implement our StoreKit code. To get started, either clone the project or download it locally from Github:\n\n- [Starting point](https://github.com/superwall-me/CaffeinePal)\n- [Finished project](https://github.com/superwall-me/CaffeinePal/tree/finished)\n\nWe'll get right to the code in a second, but first I want to review exactly what we will offer for purchase in Caffeine Pal. \n\n### So, what can we buy here?\nTo get going, make sure you can build the project first. If you can't, give me a shout on [Twitter](https://www.twitter.com/jordanmorgan10) and I'll help you out. Once it's built, you can either use SwiftUI Previews or run the app on the simulator to take a look around. For our purchasing options, we're going to charge for a few different things:\n\n1. People can buy individual recipes from the \"Recipes\" tab. These are espresso-based Caffeine Pal greats that show people how to make them, step-by-step.\n2. There is a Caffeine Pal Pro annual subscription, which unlocks other paywalled features such as caffeine tracking, custom app icons, as well as unlocking every available recipe.\n3. Finally, you can also leave a tip if you're feeling nice.\n\nEach of these items represent the three primary types of products you can sell using StoreKit:\n\n- **Consumable In-App Purchases:** These are things you use, and then they're gone. Think of \"gems\" you could buy in a game. For us, these are the tips people can buy.\n- **Non-consumable In-App Purchases:** You buy it, and then it's yours. In Caffeine Pal, that'll be recipes. Once someone buys access to one, they'll always have it.\n- **Auto-Renewing Subscriptions:** The most common purchase these days. This represents the subscriptions you're used to. They renew once expired unless someone cancels it first.\n\nKeep in mind, there are also non-renewing subscriptions, but I really want Caffeine Pal's M.R.R. to go up, and I think Caffeine Pal Pro represents an enticing value — so we won't be using those here!\n\nBefore we can write a line of StoreKit code, though, it pays to have your purchasable products setup. For that, we'll be using a StoreKit configuration file.\n\n### StoreKit configuration files\nPerhaps the best part of all of this setup? We don't even have to touch App Store Connect. By using a StoreKit configuration file, we can add products locally to test out our code. Even better, if you do have products already setup in App Store Connect, you can sync them directly to a configuration file.\n\nI've already created a configuration file for us (`CaffeinePalProducts.storekit`) and it has all of the products we can buy:\n![Caffeine Pal StoreKit File](//images.ctfassets.net/3k7cygmwfm7x/2MF5utckAfO2IV5YybFaAH/a59557064cf97492fe2da4b2d8b841ad/cp3.jpg)\n\nFeel to browse through them now, and you'll notice an entry for all of the things that you can purchase in Caffeine Pal. A subscription, tips and entries for each recipe. The important bit here is each item's `Product ID`, this is what we'll use to fetch the products using StoreKit.\n\nTo use a configuration file, we'll need to enable it in our scheme. I haven't done this on purpose because it's easy to forget when you do it on your own. So, let's fix that now. Edit Caffeine Pal's scheme, and under \"Run\" choose \"Options\". Finally, select our configuration in the \"StoreKit Configuration\" dropdown:\n![Caffeine Pal Add StoreKit Configuration](//images.ctfassets.net/3k7cygmwfm7x/2mMBJBKqckc65eTRgAg8P2/e2def5931c9b97d2baf6b642c1c250b2/cp4.jpg)\n\nWith that done, let's dive right in. The first place we'll start is by supporting tip purchases. If you look right now, none of the prices are showing for any of the tips:\n![Caffeine Pal Empty Tips](//images.ctfassets.net/3k7cygmwfm7x/3eAXMkl9xuG4sbR3kTYmFe/d37360424fc3544febb67393a59694fa/cp2.jpg)\n\nLet's fix that now! Open up `PurchaseOperations.swift` and we'll learn how to do a fundamental StoreKit operation: fetch products.\n\n### Fetching products\nThe `PurchaseOperations` class is where all of our StoreKit code will go. It uses the nascent `Observation` framework introduced in iOS 17, so syncing up our interface with StoreKit data will be a breeze.\nAt the top of the `PurchaseOperations.swift` class, you can see a few properties we have setup:\n\n```swift\n// Available Products\nprivate(set) var tips: [TippingView.AvailableTips : Product] = [:]\nprivate(set) var recipes: [EspressoDrink : Product] = [:]\nprivate(set) var subs: [Product] = []\n\n// Purchased Products\nprivate(set) var purchasedRecipes: [EspressoDrink] = []\nprivate(set) var purchasedSubs: [Product] = []\nprivate(set) var hasCaffeinePalPro: Bool = false\n```\n\nEssentially, we'll fetch all that we have available to offer and track those in the top properties. In the bottom properties, we'll track what they've bought among those offerings.\nFetching products in StoreKit 2 is achieved by calling the static function `Product.products(for:)`:\n\n```swift\nstatic func products<Identifiers>(for identifiers: Identifiers) async throws -> [Product]\n```\n\nThe `identifiers` collection here represents the identifiers you'll use in App Store Connect for your products. In our case, these are the \"Product ID\" values I mentioned earlier in our StoreKit configuration file. Let's write an extension off of our local models (`AvailableTips` for tips, and `EspressoDrink` for our recipes) which we'll use to represent product identifiers.\n\nAdd this code to the bottom of `PurchaseOperations.swift`:\n\n```swift\n// MARK: Local Models to StoreKit values\nextension TippingView.AvailableTips {\n var skIdentifier: String { \n return \"consumable.tip.\" + self.shortDescription\n }\n}\n\nextension EspressoDrink {\n var skIdentifier: String {\n return \"nonconsumable.recipe.\" + id\n }\n}\n```\n\nGreat, now both of our local data models have an identifier corresponding to their StoreKit identifiers. Again, take note at how these `String` properties will map to the identifiers in our StoreKit configuration file — each \"Product ID\" will now be represented.\n\nNow, let's aggregate them altogether into an array so we can fetch them all. Add this right above the code you just wrote:\n\n```swift\n// MARK: Product Identifiers\nextension PurchaseOperations {\n static var tipProductIdentifiers: [String] {\n get {\n return TippingView.AvailableTips.allCases.map { $0.skIdentifier }\n }\n }\n\n static var recipeProductIdentifiers: [String] {\n get {\n return EspressoDrink.all().map { $0.skIdentifier }\n }    \n }\n}\n```\nNow that we've got all of our product identifiers, we're ready to implement `retrieveAllProducts()` in `PurchaseOperations.swift`. The flow is simple, we'll fetch all of the products, which come back as a `Product` struct from StoreKit, and then store them in the corresponding property we touched on earlier:\n\n```swift\nfunc retrieveAllProducts() async throws {\n do {\n \t// 1\n let tipIdentifiers: [String] = PurchaseOperations.tipProductIdentifiers\n let recipeIdentifiers: [String] = PurchaseOperations.recipeProductIdentifiers\n let subIdentifiers: [String] = [\"subscription.caffeinePalPro.annual\"]\n let allIdentifiers: [String] = tipIdentifiers + recipeIdentifiers + subIdentifiers\n\n // 2\n let products = try await Product.products(for: allIdentifiers)\n let allTips = TippingView.AvailableTips.allCases\n let allRecipes = EspressoDrink.all()\n\n // 3\n for product in products {\n switch product.type {\n case .consumable:\n if let tip = allTips.first(where: {\n $0.skIdentifier == product.id\n }) {\n self.tips[tip] = product\n } else {\n print(\"Unknown product id: \\(product.id)\")\n }\n case .nonConsumable:\n if let recipe = allRecipes.first(where: {\n $0.skIdentifier == product.id\n }) {\n self.recipes[recipe] = product\n } else {\n print(\"Unknown product id: \\(product.id)\")\n }\n case .autoRenewable:\n self.subs.append(product)\n default:\n print(\"Unknown product with identifier \\(product.id)\")\n }\n }\n } catch {\n print(error)\n throw error\n }\n}\n```\nHere's a breakdown:\n\n1. We get all of our identifiers to pass to StoreKit, and each one represents a product we've created in App Store Connect (or in a StoreKit Configuration file). \n2. Then, we call StoreKit's function to fetch those products. \n3. Finally, we loop over the resulting products and store them in our local dictionaries representing each product. The key is our app's data model, and the value will be its corresponding `Product` representation from StoreKit.\n\nAlso, note that I don't have a model for our subscription. We just offer one for Caffeine Pal, so I've written its product identifier directly. Though, it's still in an array...\n\n```swift\nlet subIdentifiers: [String] = [\"subscription.caffeinePalPro.annual\"]\n```\n\n...so if we add more subscriptions later — they'd be added here.\n\nGreat! Now, to make sure we fetch products when Caffeine Pal runs, we'll add this logic to our existing `configure` function:\n\n```swift\nfunc configure() async throws {\n do {\n try await retrieveAllProducts()\n } catch {\n throw error\n }\n}\n```\nIn SwiftUI, I like to use a `configure` function so that we can still easily leverage Xcode Previews without actually invoking StoreKit calls inside an `init` function. If you look at `Caffeine_PalApp.swift`, you'll see the `configure()` function being called there when our app runs. \n\nNow, if we run the app and open the Settings tab, scrolling down we should see all of the tips with their actual prices showing:\n![Caffeine Pal with Tip Prices Showing](//images.ctfassets.net/3k7cygmwfm7x/6fdX0BCrv7nYqJNjrDmHgf/899a28f75ea0b4594ba1ae28bca3147f/cp5.jpg)\n\nLet's review what we've learned so far:\n- To test purchasing logic, we can use a StoreKit Configuration file that we associate to our scheme. That configuration file can either be products we make up on the fly, or it can sync to existing products in App Store Connect.\n- To fetch products, we use StoreKit 2's `Product.products(for:)` and pass it a collection of product identifiers.\n- In our models, if we have any existing ones, we need to associate those to StoreKit identifiers for use in the function mentioned above (we did this with some extensions we wrote).\n- Finally, once you fetch products, it helps to store them locally in some properties. And, I like to have two properties for each type of product — a collection for all available products from StoreKit, and a collection of those products which have been purchased.\n\nNow, let's move on to buying stuff. Time to write some purchasing code!\n\n### Purchases with StoreKit\nLet's check out some of the functions we've got to purchase our offerings in Caffeine Pal. If you open up `PurchaseOperations.swift`, you'll see three stubbed out functions:\n\n```swift\nfunc purchase(_ recipe: EspressoDrink) async throws -> Bool {\n return false\n}\n\nfunc purchase(_ tip: TippingView.AvailableTips) async throws -> Bool {\n return false\n}\n\nfunc purchasePro() async throws -> Bool {\n return false\n}\n```\n\nAll of these will funnel into one private function to purchase things, you'll see that a little further down:\n\n```swift\n// MARK: Private Functions\nprivate func purchaseProduct(_ product: Product) async throws -> Bool {\n return false\n}\n```\n\nPurchasing a product with StoreKit is as easy as invoking `purchase()` on an instance of a `Product` struct. So, our code will map a `Product` struct (which we retrieved earlier) from one of our local models. Then, we'll pass that off to our private `purchaseProduct()` function. Let's write that one first.\n\nHere's our implementation of `purchaseProduct()`:\n\n```swift\nprivate func purchaseProduct(_ product: Product) async throws -> Bool {\n do {\n let result = try await product.purchase()\n\n switch result {\n case .success(let result):\n return true\n case .userCancelled:\n print(\"Cancelled\")\n case .pending:\n print(\"Needs approval\")\n @unknown default:\n fatalError()\n }\n\n return false\n } catch {\n throw error\n }\n}\n```\n\nThe `purchase()` function will return a `PurchaseResult` that we can `switch` over. It's a very simple API (thankfully!). Let's fill in our other functions to call this one now, here are the other functions to purchase our other offerings:\n\n```swift\nfunc purchase(_ recipe: EspressoDrink) async throws -> Bool {\n guard let product = self.recipes[recipe] else {\n throw CaffeinePalStoreFrontError.productNotFound\n }\n\n return try await purchaseProduct(product)\n}\n\nfunc purchase(_ tip: TippingView.AvailableTips) async throws -> Bool {\n guard let product = self.tips[tip] else {\n throw CaffeinePalStoreFrontError.productNotFound\n }\n\n return try await purchaseProduct(product)\n}\n\nfunc purchasePro() async throws -> Bool {\n guard let product = subs.first else {\n throw CaffeinePalStoreFrontError.productNotFound\n }\n\n return try await purchaseProduct(product)\n}\n```\n\nTo recap:\n- Purchasing in StoreKit 2 is done via getting a `Product` instance.\n- Then, you invoke the `purchase()` function on it.\n- From there, you inspect the resulting `PurchaseResult`.\n\nHowever, if we have this all in place — we're still needing to implement one more important piece of the puzzle. That is, verifying our transactions.\n\n### Transaction verification\nEach time someone buys something, we get a `PurchaseResult` to inspect. If the purchase was successful, we get a verification result (`VerificationResult<Transaction>`). In that verification result, we want to make sure the purchase was signed by the App Store for our app. Under the hood, there is a JWS payload — but you don't need to worry about the details for the most part.\n\nWhat we do need to know is this: we should verify each purchase. So, let's write a function to check verification status. Add this new function under `purchaseProduct()`:\n\n```swift\nprivate func verifyPurchase<T>(_ result: VerificationResult<T>) throws -> T {\n switch result {\n case .unverified:\n throw CaffeinePalStoreFrontError.failedVerification\n case .verified(let safe):\n return safe\n }\n}\n```\n\nIf the transaction is legitimate, we return the result (which will be a `Transaction` instance). Since we funnel all purchases down to the same function, we only need to update this in one spot, our `purchaseProduct()` function. In the `.success(let result):` case, add this above `return true`:\n\n```swift\nlet verificationResult = try self.verifyPurchase(result)\nawait verificationResult.finish()\nreturn true\n```\n\nGreat! At this point, we should be able to purchase anything in Caffeine Pal. Give it a try:\n- Buy a tip.\n- Purchase an individual recipe.\n- Or, join Caffeine Pal Pro.\n\nHere's an example of buying a tip in action, complete with the localized price showing by using the `displayPrice` property of the corresponding `Product`:\n![Caffeine Pal Purchase Tip](//images.ctfassets.net/3k7cygmwfm7x/4yoPmvVPCwxdkN5zKWzqwQ/2a8a369f8d64c345b6d69a33ec131f12/cp6.jpg)\n\nTo recap here:\n- We want to verify that purchases came from the App Store after we call `product.purchase()` and get a successful result.\n- We do that by switching over the `VerificationResult` and making sure it's verified.\n- We should do this for all purchases.\n\nBut wait! Xcode is upset about something, even though our purchases are working. You might've noticed this little error as we bought a product:\n\n```bash\nMaking a purchase without listening for transaction updates risks missing successful purchases. Create a Task to iterate Transaction.updates at launch.\n```\n\nXcode makes a great point. What if the user needs their parent to \"okay\" the transaction? Then it would be pending. Or, what if they bought stuff from another device? And so on. Listening for transactions is key, so we'll do that next.\n\n### Transaction listener\nTo start, we'll add a property that'll hold a reference to a task which listens for any transaction changes from StoreKit. In `PurchaseOperations.swift`, add this right underneath the existing properties:\n\n```swift\n// Listen for transactions\nvar transactionListener: Task<Void, Error>? = nil\n```\n\nNext, let's write a function to create the listener. Underneath the stubbed out `updateUserPurchases()` function, let's add this:\n\n```swift\nprivate func createTransactionTask() -> Task<Void, Error> {\n return Task.detached {\n for await update in Transaction.updates {\n do {\n let transaction = try self.verifyPurchase(update)\n try await self.updateUserPurchases()\n await transaction.finish()\n } catch {\n print(\"Transaction didn't pass verification - ignoring purchase.\")\n }\n }\n }\n}\n```\n\nDon't worry if you haven't worked a lot with Swift concurrency, this function really isn't as complicated as it looks. Here, we return a detached task and listen for any updates from StoreKit. Once they come in, we verify them as we've been doing and call `updateUserPurchases()` (which we haven't implemented yet — that's next!) to keep everything in sync. \n\nNow, if purchases are pending, bought from another device or anything else along those lines, we'll pick those up.\nLet's hook this up in our `configure()` function to initialize our task, and we'll also add our `updateUserPurchases()` call while we're at it:\n\n```swift\nfunc configure() async throws {\n do {\n transactionListener = createTransactionTask()\n try await retrieveAllProducts()\n try await updateUserPurchases()\n } catch {\n throw error\n }\n}\n```\n\nThe last step is to make sure we kill the task when our class is deinitialized, so add that right underneath the property declaration for our listener:\n\n```swift\n// Listen for transactions\nvar transactionListener: Task<Void, Error>? = nil\n\ndeinit {\n transactionListener?.cancel()\n}\n```\n\nWe're nearly done and having a fully functioning app, complete with purchases for nonconsumbales, consumables and a subscription. But, we've got one more critical piece of code to write — and that's updating which products the user has bought in our `updateUserPurchases()` function. \n\nThat's next, but first let's recap:\n- A transaction listener is