# Launch an app with persona accounts with Zapier

Source: https://developers.tokportal.com/agents/zapier/app-persona-launch/
Markdown: https://developers.tokportal.com/agents/zapier/app-persona-launch.md

An app launch on short video usually runs on personas — "the productivity nerd", "the student", "the parent" — each a real account with its own voice, bio link and content plan. From Zapier, each persona is one TokPortal bundle: `create_bundle` in the launch country, `configure_bundle_account` with the persona's handle, bio and `link_in_bio` (your store or deep link), warming terms in the persona's niche, and 30 days of `configure_bundle_video` slots showing the app in that persona's life. Human managers hold the accounts, so there is no OAuth per persona and no audit; `get_analytics_dashboard` compares personas.

## Connect TokPortal to Zapier

Zapier is a workflow / low-code platform: Automation platform; today TokPortal is used via Webhooks by Zapier (REST) — a native TokPortal app is coming.

**Webhooks by Zapier → Custom Request** action:

- Method `POST` · URL `https://app.tokportal.com/api/ext/bundles`
- Headers: `X-API-Key: sk_...` and `Content-Type: application/json`
- Data: the JSON body from the examples below.

Inbound events: create a **Webhooks by Zapier → Catch Hook** trigger, then register its URL with `POST /webhooks` (or `tokportal_create_webhook_endpoint`) for the events you want (`account.finalized`, `video.finalized`, `account.banned`…). A native Zapier app is in preparation; the REST path keeps working. Guide: [Zapier + social media automation](https://developers.tokportal.com/use-cases/no-code/zapier-social-media-automation).

Snippet status: **best-effort** — follows Zapier's documented pattern ([source](https://help.zapier.com/hc/en-us/articles/8496288690317-Set-up-a-webhook-trigger-in-Zaps)); tell us if a field name changed.

Dedicated guide: [Zapier + TokPortal](https://developers.tokportal.com/use-cases/no-code/zapier-social-media-automation).

Once connected, sanity-check the setup with a read-only call: "What is my TokPortal credit balance?" should trigger `tokportal_get_credit_balance`. GET requests and dry-run writes do not spend credits.

## Try the workflow without spending

For this trial, use the remote MCP endpoint `https://app.tokportal.com/api/ext/mcp`, local `tokportal-mcp` **1.15.1 or later**, or the REST API. Upgrade and restart an older local server first. Version 1.15.0 does not forward the dry-run header; do not use its write tools for a simulation. If you cannot verify the installed local version, use the remote endpoint or REST.

Use the [sandbox](https://developers.tokportal.com/sandbox) for the first attempt. MCP write tools accept `dry_run: true` as a top-level argument, beside `body`; REST writes accept the `X-TokPortal-Dry-Run: true` header. Keep your usual authentication and scopes. Each simulated write validates the request and returns `credits_would_charge` with `credits_charged: 0`. Nothing is created or published.

Simulated IDs start with `00000000-0000-4000-8000-`. Use them only in later dry-run writes. GET requests read real data, so skip publish-readiness checks and polling for synthetic IDs. Simulations have no cross-call memory and upload URLs are placeholders: do not upload files to them.

To run for real, review the returned price and confirm **before the first live write**. Bundle creation charges credits immediately; publishing hands the order to a manager. Repeat creation without dry-run mode and use the new real IDs for configuration and publishing. A synthetic ID cannot be reused in a live request.

## How it works

Design the cast first: 3–6 personas, each with a country (the app's launch markets), a platform (TikTok, Instagram or both), a handle, a one-line bio ending with a call to action, and a link — TokPortal supports `link_in_bio` as a URI, so use a tracked link per persona (`?utm_content=persona_a`) to attribute installs. Create each with `create_bundle` (`account_and_videos`, `videos_quantity` 30–60), or all at once with `create_bundles_bulk` if they share a country, then personalize each account with `configure_bundle_account` (`username`, `visible_name`, `biography`, `profile_picture_url` uploaded via `upload_image_from_url`, `link_in_bio`).

Warming matters for personas because the account should look like the person: `generate_warming_terms` from "college student who studies with Pomodoro apps" gives terms a student would search. Content is per persona: screen recordings of the app, talking-head style clips, before/after — uploaded once via `upload_video`, then placed with `batch_configure_bundle_videos` at ≤3 posts per day, captions in the persona's voice, `disclose_as_ads: true` where your legal team says so. `publish_bundle` per persona.

Then run it as a portfolio from Zapier: `get_analytics_dashboard` and `get_analytics_series` per account (`account` filter) show which persona converts, `list_analytics_account_comments` reveals objections to answer in the next batch, and `add_video_slots` extends the winners. Register `account.finalized`, `video.finalized` and `account.banned` webhooks so the agent (or your Slack) knows the state of every persona without polling.

## Run it from Zapier

In Zapier the same sequence becomes nodes/steps: either an AI Agent step with the TokPortal tools and the prompt below as its instruction, or one deterministic step per tool. Set `dry_run: true` on MCP write tools, or `X-TokPortal-Dry-Run: true` on HTTP write steps. Map `data.bundle_id` from bundle creation into later simulated write steps; poll only after a real run.

**Tool sequence**

1. `tokportal_get_credit_costs` — Personas × (setup + slots + warming) before committing.
2. `tokportal_create_bundle` — One per persona: `platform`, `country`, `videos_quantity`, `wants_advanced_warming` + terms.
3. `tokportal_upload_image_from_url` — Persona avatar → `profile_picture_url` (purpose profile\_picture).
4. `tokportal_configure_bundle_account` — `username`, `visible_name`, `biography`, `link_in_bio` (tracked per persona).
5. `tokportal_batch_configure_bundle_videos` — 30-day plan per persona, ≤3/day, persona-voice captions.
6. `tokportal_publish_bundle` — Per persona.
7. `tokportal_create_webhook_endpoint` — `account.finalized`, `video.finalized`, `account.banned` → your Slack/agent.
8. `tokportal_get_analytics_dashboard` — Compare personas (`account` filter, `from`/`to`).
9. `tokportal_list_analytics_account_comments` — Objections and questions per persona to feed the next batch.

**Prompt to paste**

```text
Evaluate this workflow in the TokPortal sandbox only.
Use the remote MCP endpoint https://app.tokportal.com/api/ext/mcp or local tokportal-mcp 1.15.1 or later for write tools.
Verify the installed local version before using its write tools. Version 1.15.0 is unsafe for simulations.
If the local version is older or unknown, use the remote endpoint or authenticated REST
requests with X-TokPortal-Dry-Run: true instead.
For every non-GET MCP tool call, set dry_run: true as a top-level boolean beside body.
For every REST write in a workflow, send the X-TokPortal-Dry-Run: true header.
Use normal read tools for existing real objects. Do not GET or poll synthetic IDs,
and do not upload files to simulated upload URLs. Simulated objects have no cross-call memory.
Show credits_would_charge and verify credits_charged is 0 for each simulated write.
Do not execute any live write. Ask for my explicit GO before the first real write,
including bundle creation, which charges immediately. After GO, repeat creation
without dry_run and use the new real IDs; never reuse synthetic IDs in live requests.

Use the TokPortal MCP tools. App launch, US, TikTok. Personas: (A) college student "kai.studies",
(B) remote worker "desk.by.dana", (C) parent "mornings.with.mo". For each: create_bundle
(account_and_videos, 30 videos, advanced warming with 3 terms from generate_warming_terms),
configure_bundle_account with a tracked link https://focusapp.example/get?utm_content=<persona>.
Read get_credit_costs first, simulate each creation and report credits_would_charge.
```

Use one Custom Request step per API call; Zapier exposes each response field for mapping into the next step.

**REST equivalent** (write requests below are simulations; GET requests read existing real data)

```bash
# Persona A — student, US, TikTok
curl -X POST -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/bundles \
  -H "X-API-Key: sk_..." -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{"bundle_type":"account_and_videos","platform":"tiktok","country":"US","videos_quantity":30,"title":"Persona A – student",
       "wants_advanced_warming":true,"advanced_warming_terms":["study with me","pomodoro","college productivity"],"external_ref":"launch-persona-a"}'

curl -X PUT -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/bundles/BUNDLE_A/account \
  -H "X-API-Key: sk_..." -H "Content-Type: application/json" \
  -d '{"username":"kai.studies","visible_name":"Kai","biography":"finals survivor · my study stack ↓","link_in_bio":"https://focusapp.example/get?utm_content=persona_a","profile_picture_url":"https://.../kai.jpg"}'

curl -X POST -H "X-TokPortal-Dry-Run: true" https://app.tokportal.com/api/ext/webhooks \
  -H "X-API-Key: sk_..." -H "Content-Type: application/json" \
  -d '{"url":"https://hooks.example.com/tokportal","events":["account.finalized","video.finalized","account.banned"]}'
```

## Key parameters

| Parameter             | Values                              | Notes                                                            |
| --------------------- | ----------------------------------- | ---------------------------------------------------------------- |
| `link_in_bio`         | URI                                 | One tracked link per persona for attribution.                    |
| `profile_picture_url` | public URL or TokPortal storage URL | Upload with upload\_image\_from\_url (purpose profile\_picture). |
| `biography`           | ≤80 TikTok · ≤120 Instagram         | Persona voice + CTA.                                             |
| `external_ref`        | ≤200 chars                          | e.g. launch-persona-a; filter list\_bundles by it.               |
| `videos_quantity`     | 0–500                               | 30 = \~10 posting days at 3/day, or 30 days at 1/day.            |
| `platform`            | tiktok · instagram                  | One bundle per platform per persona.                             |

Full schemas: [OpenAPI reference](https://developers.tokportal.com/api-reference) · [openapi.json](https://developers.tokportal.com/openapi.json).

## Example configurations

**Persona on Instagram (FR)**

```json
{"bundle_type":"account_and_videos","platform":"instagram","country":"FR","videos_quantity":24,"title":"Persona B – parent",
 "wants_advanced_warming":true,"advanced_warming_terms":["organisation famille","routine du matin","astuces parents"],"external_ref":"launch-persona-b"}
```

**Persona account config**

```json
{"username":"lea.organise","visible_name":"Léa","biography":"2 enfants, 0 chaos (presque). Mon app ↓","link_in_bio":"https://focusapp.example/fr?utm_content=persona_b"}
```

**Reel slot**

```json
{"video_type":"video","instagram_content_type":"reel","description":"le matin en 3 étapes ✨","target_publish_date":"2026-09-10","video_url":"https://.../morning.mp4"}
```

## Credits

A persona with 30 posts and 3 warming targets is 32 + 60 + 15 = 107 credits at standard rates; four personas ≈ 430 credits. Credits are charged on real bundle creation. A dry run charges 0 and returns `credits_would_charge`. Live rates: `get_credit_costs` — see [Credits & Pricing](https://developers.tokportal.com/credits).

## Why not the official API

The official APIs would make each persona a separate real user who signs up, authorizes your audited app, and stays under per-token and per-day caps — and none of it creates the account or the persona's history. TokPortal makes a persona an ordered, warmed, human-operated account with a bio link, which is the actual job.

As of August 2026 the first-party routes look like this. TikTok's Content Posting API (Direct Post) requires each account owner to authorize your app with the `video.publish` scope, limits every user access token to 6 requests per minute, keeps all posts from unaudited apps in private viewing mode until TikTok audits the app, and enforces an unpublished daily post cap per user (`spam_risk_too_many_posts`) that integrators commonly report at roughly 15–25 posts per account per day. Meta's Instagram Content Publishing API allows 100 API-published posts per professional account in a 24-hour moving window and only for accounts you own and connect via OAuth. Neither creates accounts, warms them, or reports third-party bans. TokPortal is human-operated infrastructure: accounts created and run by managers in the target country, one `X-API-Key` for all of them, dated slots (max 3 per day per bundle) instead of per-account tokens.

Sources: [TikTok Content Posting API – Direct Post](https://developers.tiktok.com/doc/content-posting-api-reference-direct-post), [TikTok Content Posting API – Get started](https://developers.tiktok.com/doc/content-posting-api-get-started), [Instagram Platform – Content Publishing](https://developers.facebook.com/docs/instagram-platform/content-publishing).

## FAQ

### How do I attribute installs per persona?

Distinct `link_in_bio` per account with UTM/deep-link parameters; read clicks/installs in your attribution tool and post metrics from `get_analytics_dashboard` (`account` filter).

### Can one persona exist on TikTok and Instagram?

Yes — two bundles (one per platform) with the same handle if available; `create_bundles_bulk` with `platforms: ["tiktok","instagram"]` does it in one call.

### How do managers keep the voice consistent?

Captions are yours (`description`), visuals are yours (`video_url`); the manager posts as instructed and does not improvise copy. Express the persona in the warming phase through `advanced_warming_terms` — the niche searches the account is made to perform are what give it a believable history.

### What if a persona underperforms?

Stop adding slots to it, extend winners with `add_video_slots`, and reuse the account later with a `videos_only` bundle — accounts stay managed and warm.

## Related

- [DTC multi-market launch](https://developers.tokportal.com/use-cases/industry/dtc-multi-market-launch)
- [Account configuration](https://developers.tokportal.com/account-configuration)
- [Webhooks](https://developers.tokportal.com/webhooks)
- [Analytics API](https://developers.tokportal.com/analytics)
- [MCP server](https://developers.tokportal.com/mcp)

## Also works with

- [Launch an app with persona accounts with Factory Droid](https://developers.tokportal.com/agents/factory-droid/app-persona-launch)
- [Launch an app with persona accounts with n8n](https://developers.tokportal.com/agents/n8n/app-persona-launch)
- [Launch an app with persona accounts with Make](https://developers.tokportal.com/agents/make/app-persona-launch)
- [Launch an app with persona accounts with Pipedream](https://developers.tokportal.com/agents/pipedream/app-persona-launch)
- [Launch an app with persona accounts with Dify](https://developers.tokportal.com/agents/dify/app-persona-launch)
- [Launch an app with persona accounts with Flowise](https://developers.tokportal.com/agents/flowise/app-persona-launch)

[All 25 agents for "Launch an app with persona accounts"](https://developers.tokportal.com/agents/for/app-persona-launch)

## Other jobs with Zapier

- [Create TikTok accounts with Zapier](https://developers.tokportal.com/agents/zapier/create-tiktok-accounts)
- [Post 100 TikTok videos a day with Zapier](https://developers.tokportal.com/agents/zapier/post-100-videos-a-day)
- [Run US TikTok accounts from abroad with Zapier](https://developers.tokportal.com/agents/zapier/us-tiktok-accounts-from-abroad)
- [Warm TikTok & Instagram accounts with Zapier](https://developers.tokportal.com/agents/zapier/warm-accounts)
- [Run a faceless TikTok channel with Zapier](https://developers.tokportal.com/agents/zapier/faceless-channel)
- [Seed UGC across many accounts with Zapier](https://developers.tokportal.com/agents/zapier/ugc-seeding)
- [Seed a music sound on TikTok with Zapier](https://developers.tokportal.com/agents/zapier/music-sound-seeding)
- [Run multi-client agency operations with Zapier](https://developers.tokportal.com/agents/zapier/agency-multi-client)
- [Get ban alerts via webhooks with Zapier](https://developers.tokportal.com/agents/zapier/ban-webhooks)
- [Pull analytics across all accounts with Zapier](https://developers.tokportal.com/agents/zapier/analytics-multi-account)
- [Create Instagram accounts with Zapier](https://developers.tokportal.com/agents/zapier/create-instagram-accounts)
