Skip to content
DocsPlatform review videos
Docs / Agents / Record a platform review video (TikTok, Meta, Google, Apple)

Record a platform review video (TikTok, Meta, Google, Apple)

Have your agent record the demo video a platform asks for before it reviews your app. DemoTake records just the web page with its address bar, hands sign-in to you, leaves waits out, and checks the video and its file size before you upload.

DemoTake Agent and StudioWeb appsTikTok · Meta · Google · Apple

Before TikTok for Developers, Meta App Review, Google OAuth verification or Apple App Review approve your app, they may ask for a screen recording. It has to show your app signing in with their account, asking for each permission (scope), and using it. Reviewers are strict. TikTok, for example, wants the website domain in the video to match the URL in your form, every product and scope shown, and an MP4 or MOV file of at most 50 MB.

This guide shows how an agent records that video with DemoTake 1.2. The same settings are in the app if you record it yourself (see Without an agent).

What you need

  • DemoTake Agent or DemoTake Studio, connected to your agent (Connect your agent).
  • Your web app open in a browser: Chrome, Edge, Brave, Arc or Safari.
  • The website URL and the scopes from the review form.
  • You at the Mac for the sign-in and consent steps. Those are yours to do, not your agent's.
  1. take_createreview preset + browser page
  2. capture_start
  3. take_handoffyou sign in
  4. take_waitslow server work
  5. capture_stop
  6. edit_suggest_cuts
  7. export_renderupload, under 45 MB
  8. review_checkchecklist
The calls for a TikTok review video. Scenes are recorded between capture_start and capture_stop as usual.

1. Plan the take with a review preset

Ask your agent for a reviewer take with the platform, your app URL and the scopes. Each scene says what it shows; the scene with the consent screen lists the scopes it shows.

take_create
{
  "name": "TikTok review",
  "purpose": "reviewer",
  "platform": "tiktok",
  "app_url": "https://example.com",
  "scopes": ["user.info.basic", "video.upload"],
  "target": { "url_contains": "example.com" },
  "browser": { "mode": "page", "address_bar": "drawn" },
  "scenes": [
    { "title": "Open settings", "intent": "The app's settings page with Connect TikTok" },
    { "title": "Authorize", "intent": "TikTok asks for 2 permissions", "shows_scopes": ["user.info.basic", "video.upload"] },
    { "title": "Upload", "intent": "Send a video to the TikTok inbox", "shows_scopes": ["video.upload"] },
    { "title": "Result", "intent": "The draft is in the TikTok inbox" }
  ]
}
platform Review
tiktok TikTok for Developers app review
meta_app_review Meta App Review
google_oauth Google OAuth verification
apple_review Apple App Review

A preset does three things. It captions each scene with its intent after recording, sets the export defaults (TikTok: upload-friendly, under 45 MB), and tells review_check what to check.

2. Record only the page, with its address bar

A browser window shows much more than your app: other tabs, other projects' tab groups, and automation bars such as "Chrome is being controlled by automated test software" that come and go. The reviewer still needs the address bar, because the domain has to match your form.

BEFORE
Whole browser window
  • Unrelated tabs and tab groups
  • Automation bars that come and go
  • Real toolbar and extensions
AFTER
Browser page only
  • Just the page
  • A clean address bar with domain and path
  • Follows redirects to the sign-in page and back

With browser: {mode: "page", address_bar: "drawn"}, DemoTake records only the page area and draws a clean address bar above it from the tab's address: a lock, the domain and the path, never the query string. The crop follows the page as bars appear and disappear, and the address bar follows every navigation, including the platform's own sign-in domain.

target: {url_contains: "example.com"} records the window whose tab shows that address, so your agent doesn't depend on window titles, which change with the active tab. DemoTake keeps following that window. targets_list {tabs: "all"} lists every tab's title and address in DemoTake Agent, for every window, including windows on another Space.

When the tab isn't in front

Your agent often opens your app in a tab behind one of your own tabs, or in a window on another Space. DemoTake Agent handles that with browser.tab:

  • isolate (the default for review takes) opens the page in a new window, the same size and place as the original, and records that window. Your own tabs and windows stay as they were, and no other tab can take the recording's place. The original tab stays open, unless your agent calls browser_tab with close_original: true.
  • select (the default for other takes) makes the tab the active tab of its window.
  • require_active changes nothing and stops with a message instead.

A tab that is already in front, in a window on this Space, is recorded where it is. Your agent can also do this before creating the take with browser_tab. DemoTake uses Apple Events for this: the first time, macOS asks whether DemoTake may control your browser. Sign-ins carry over to the new window. With several Chrome profiles, DemoTake checks that the new window opens in the tab's profile. If Chrome opens it in another profile, DemoTake closes it, tries once more with Chrome in front, and otherwise asks your agent to use select. When a second copy of Chrome runs next to yours (another tool can start one with its own profile folder), DemoTake asks each copy on its own and only changes tabs in the copy that shows them. If a copy doesn't answer, the error names it by its process number.

With an explicit isolate, DemoTake records the window where it is only when it knows the tab is alone there. If it can't read the window's tab list, it opens the new window anyway.

If another tab comes to the front of the recorded window while recording, DemoTake pauses the capture and says so in capture_status and events_poll. Switch back to the tab and resume. Navigations and redirects inside the tab are fine. DemoTake Studio doesn't control other apps, so there, put the tab in front yourself.

  • DemoTake Agent reads the page area and the address with Accessibility.
  • DemoTake Studio finds them with on-screen text recognition of the toolbar. Keep the address bar visible. If the page area comes out wrong, your agent can set browser.page_region, and it can report page changes with take_log_event {kind: "navigation", url}.

If your agent clicks through the app with a browser automation tool, DemoTake only records. It then leaves its own drawn pointer off, so the video doesn't show two cursors.

When the flow reaches the platform's sign-in, your agent hands the step to you:

take_handoff
{
  "take_id": "take_…",
  "message": "Sign in to TikTok and stop at the consent screen",
  "resume_when": { "text": "wants to access your account", "timeout": 600 }
}

DemoTake pauses the recording and shows the message in a banner and a small floating panel, on top of other windows. You sign in. Recording picks up by itself when the text appears on screen, or when you press Resume. The time you spent signing in isn't in the video. With blur: true, DemoTake keeps recording and blurs the whole frame instead, so the video shows that a sign-in happened without showing it.

Do the same for the consent screen if you press Allow or Continue yourself. Text recognition doesn't need Accessibility, so hand-offs work in DemoTake Studio too.

Reviewer notes and the manifest say who did each step: your agent, an automation tool, or a person. If DemoTake recorded your automation tool's clicks as a person's, your agent fixes that with take_relabel_events.

4. Leave slow server work out

Uploads and background jobs can take a minute before the app shows a result. Nobody needs to watch that.

take_wait
{
  "take_id": "take_…",
  "resume_when": { "text": "Draft sent to your inbox", "timeout": 300 },
  "card": "A moment later"
}

Recording pauses until the result appears, then picks up with a short "A moment later" card. The card is an ordinary caption you can edit or remove.

5. Edit for the reviewer

Reviewers need to see the whole flow, slowly enough to read. Keep the cut honest: shorten waiting, never change how the product behaves.

  • edit_suggest_cuts shortens still stretches. Consent, readable and result screens keep their reading time and are flagged for review.
  • max_still_seconds sets the longest still to keep. Screens under a caption keep their time.
  • Captions come from the scene intents. Without a preset, captions_from_intents adds them. They're attached to their scenes, so they stay in place when the cut changes.
  • preview_frame shows the exact frame the export will draw at a time in the edited video. Use it to check the address bar, a crop or a caption without exporting.

6. Export under the upload limit

export_render
{ "take_id": "take_…", "formats": ["16:9"], "quality": "upload", "max_mb": 45, "wait": true }

quality: "upload" makes a small H.264 file tuned for app recordings. max_mb keeps it under that size: DemoTake picks the bitrate and encodes again if the first file comes out too big. The finished job reports the file size and whether it fits TikTok's limit. With the TikTok preset these are the defaults.

For Meta, Google and Apple, DemoTake checks the file format only. Check each platform's current requirements before you upload.

7. Run the review check

review_check
{ "take_id": "take_…" }
Check Passes when
Website domain visible The domain in the video matches your app URL, and the address bar is visible
Every scope demonstrated Each scope has a scene in the cut that shows it
Consent screens readable Every consent screen stays on screen for at least 3 seconds
Video file The latest export has the right format and, for TikTok, is MP4 or MOV and at most 50 MB

Each check is pass, fail, warn or unknown, with what to fix. The check never changes the take. The result also has a checklist: paste-ready text for the review form, listing the video file, the website shown, the steps, where each scope appears, and which steps a person did. Your agent hands it to you with the file path.

Note:

DemoTake helps you show how your app works. It doesn't guarantee approval by TikTok, Meta, Google, Apple or any other platform.

Without an agent

Everything above is in the app too:

  1. File › New Reviewer Take… (⇧⌘N). For a browser window, turn on Browser page only and Show address bar, and fill in URL contains. Under Platform review, pick Review for, then add the App URL and Scopes. See Choosing a window.
  2. Record your scenes. Pause while you sign in.
  3. In the Export sheet, set Quality to Upload-friendly and turn on Keep under a size. See Formats and sizes.
  4. Open in Reviewer Mode, run the Platform review check, and click Copy Checklist. See Reviewer Packs.

Where to go next

Was this page helpful?