No filming:An AI avatar or clone yourself
    Comparisons

    Spark Ads vs a dark post

    Spark Ads spend behind a live public post and keep its comments. A dark post is unpublished, starts at zero, and never hits the page.

    Versely Team••7 min read

    Spark Ads spend behind a post that already exists in public. The paid unit keeps that post's likes, comments, and the account it was posted from. A dark post is unpublished. It never hits the brand page. It starts at zero. Same ads manager, opposite objects. Do not brief "run it dark on Spark." That sentence names two placements that cannot be the same file at the same time.

    This is the public-versus-unpublished split. It is not the Spark-versus-whitelist contract walkthrough, and it is not a setup guide for authorization codes.

    Spark needs a live post

    TikTok's Business Help Center describes Spark Ads as promotion through the original post rather than a copy of it (ads.tiktok.com/help/article/spark-ads). That sentence is the whole product. There has to be a post. Someone published it. Viewers can find it without seeing an ad. Comments on the ad are comments on that post.

    What Spark is, as an object:

    • A live TikTok (yours or a creator's, with their authorization).
    • A time-boxed authorization token if the post is not yours — commonly 7, 30, 60, or 365 days.
    • Paid reach attached to that identity and that engagement history.
    • Moderation work on the original post, because that is where the conversation lives.

    What Spark is not:

    • A way to hide a test from your followers. The post is public.
    • A licence to recut the MP4 into a brand-account ad. That is usage rights.
    • Account-wide access to a creator. That is whitelisting, and on TikTok the closest product is still per post.

    If the talent never posts, you cannot Spark. File-only UGC creators sell footage. Spark sells identity around a post they actually published. Ads with UGC still show about 4× click-through and about 50% lower CPC, and 86% of brands say UGC lifts ad performance (Kapwing 2026; Billo). Those lifts do not tell you whether the ad inherited comments. Spark does. A dark post does not.

    A generated talking head with no account cannot Spark. There is no original post. There is no comment thread to keep. Put that file in a brand ad or a dark unit if the licence allows it, and label it if it is photoreal. Spark is not the row for a synthetic person.

    A dark post is unpublished on purpose

    Meta's own documentation calls a dark post an unpublished Page post, built and served exclusively through the ads system (facebook.com/business/help/835452799843730). Nobody visiting the brand page organically ever sees it. That invisibility is the feature.

    What a dark post is for:

    • Many narrow variants at once — different hooks, different offers, different audiences — without filling the public grid with twelve cousins.
    • Tests you would not want every follower to see. A 20% off that is only for one lookalike. A claim you are still checking.
    • Creative that would look like spam if it sat on the Page as twelve near-duplicate posts.

    What a dark post is not:

    • A Spark Ad with the comments turned off. There are no organic comments to inherit. The unit starts at zero the way any new ad does.
    • A boosted post. A boost starts public and pays for more of that public post. The dark post was never public.
    • A place to hide a material connection. Paid is still paid. The FTC still wants a clear disclosure on the unit the viewer sees.

    Because nothing is public, you need a naming convention or you will learn nothing. "Hook_A_pack_hold_0910" beats "new ad 4." Batch generation is how you produce the variants in one sitting. The dark unit is how you run them without committing the Page. The batch is not the placement. The placement is not the batch.

    TikTok's ads manager can also serve ads that are not attached to an organic post. That is closer to a dark unit than to Spark. If you needed the comment thread, you picked the wrong object. If you needed to hide the test, Spark was the wrong object.

    The mix-up that wastes the buy

    Teams collapse the two because both can feel like "ads that are not a new brand film." The glossary pitfall is explicit: a dark post is the brand's own unpublished content; Spark runs spend through a post that is genuinely public somewhere.

    The failure modes are specific.

    You Spark a test you meant to hide. Followers see the post. The weak hook sits on the creator's profile for the life of the authorization. Comments on a bad offer live under a post you cannot quietly delete without also killing the ad.

    You dark-post a winner you meant to Spark. You paid for a peer identity and then ran the file from a brand unit with zero social proof. 92% of consumers trust a peer over a brand message in the same Kapwing / Billo stack. You bought the footage and threw away the identity.

    You treat a Spark code as a dark-post licence. The code authorizes that post, as it stands, for a window. It does not authorize a recut, a new caption, or a cousin generated in another app. If you needed to swap the first three seconds, you needed a new post and a new code — or a usage licence to run a different file from the brand account.

    You generate twelve openings and try to Spark all of them. Spark is per post. Twelve Sparks is twelve live posts and twelve tokens. A dark batch is twelve unpublished units and one Page that still looks like a Page.

    Write the brief as one sentence that cannot name both objects: "Spend behind Maya's 14 September TikTok for 60 days" is Spark. "Run four unpublished pack-hold variants to lookalikes, do not publish to the grid" is dark. If the sentence needs both, you have two jobs and two invoices.

    Pick the object, then make the file

    Spark wants a post worth spending behind. Make that post as if it had to live without media money. Then attach spend. The UGC video generator is for the talking cut and the product inserts, not for minting a fake creator account to Spark from. Burn captions for mute autoplay. Keep the SKU real.

    A dark test wants variants you can kill without a public trail. Generate the openings as a batch. Hold everything constant except the hook. Run the unpublished units. Promote only the winner to a public post — and if that winner then needs Spark, publish it first. You cannot Spark a file that does not exist as a post.

    When the catalog row matters, name it. Veo 3.1 is 40 credits, native audio, 4 / 6 / 8 seconds, 4K tier. Seedance 2.0 is 69 credits, 4–15 seconds, 1080p, native audio. Neither row is a placement. The model does not decide Spark versus dark. The contract and the ads manager do.

    If the week is "public post with a real comment thread" or "unpublished tests, Page stays clean," make the files on one bill and keep the placement honest. Sign up and write Spark or dark in the brief before anyone presses generate.

    FAQ

    Can I Spark a dark post?

    No. Spark requires a live public post. A dark post is unpublished by design. Publish first if you want Spark. Keep it unpublished if you want a dark test. You do not get both on the same unit.

    Does a dark post keep comments the way Spark does?

    No. A dark post has no organic history. Comments, if any, live on the ad unit, not on a Page post followers can find later. Spark's point is the opposite: the paid conversation is the original post's conversation.

    Is a brand-account Spark the same as a dark post?

    No. A Spark on your own TikTok is still a public post with paid reach attached. Followers can find it. A dark post never appears on the Page. Boosting your own post is a third object: public, then paid, on your identity — still not unpublished.