anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that runs a video sales letter desk from Airtable. Perplexity researches the product, Gemini writes ad angles and full scripts, and a weekly job logs your Facebook video ad results and transcribes the winning ads.
Video sales letter scripts from Airtable is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 2, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
Webhook or weekly schedule
It starts in one of three ways:
Researched products, ad angles and scripts in Airtable, beside your Facebook ad results and the transcripts of your best ads
What you need before you start.
Database
Holds the Product, Scripting and Ads Performance tables, which every flow reads from and writes back to.
NeedsPersonal access token, and a base with the three tables
Research
Writes a profile of the product and its buyers through its chat completions endpoint.
NeedsPerplexity API key
Script writing
Writes the ad angles, the full scripts and the rewrites.
NeedsGemini API key
Parsing and transcripts
Holds the angles to a JSON shape with gpt-4o-mini and turns an ad’s video into text.
NeedsOpenAI API key
Ad data
Reads ad accounts, campaigns, ad sets, ads and their results through the Graph API.
NeedsAccess token that can read ads
Page fetching
Loads a Facebook video page in a browser so the video’s address can be found.
NeedsScrapfly API key
Checked by Mindket on 13 Nov 2026
This n8n workflow turns an Airtable base into a small studio for video sales letters. Its 54 nodes make up three flows, and they are independent, so you can use one and ignore the others. The first answers calls to a webhook and does four jobs. Perplexity researches a product and its buyers. Gemini proposes five to eight ad angles, writes a full script for the angle you pick and rewrites that script from your notes. Each result goes back into the Airtable record it came from. The second flow runs weekly and logs your active Facebook video ads with their spend, clicks and conversions. The third takes one logged ad, fetches its video through Scrapfly and has OpenAI transcribe it, so your best ads can shape the next round of angles.
Performance marketers, small agencies and in-house ad teams that write video ads for Facebook and want the research, the angle ideas and the first drafts in one Airtable base. It is a build for people who already work in Airtable.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Online retail | Brand owners and media buyers | Log each product in the Product table, then call the research action and the angles action | A buyer adds a new water bottle and finds a buyer profile and a set of angles in the base, with no brief written. |
| Marketing agencies | Creative strategists | Keep one base per client and link each client’s best ad transcripts to the product through the Winning Ad Script field | A strategist transcribes a client’s top video ad, then asks for fresh angles that build on what it did. |
| Courses and coaching | Course creators | Research who buys a program, then script each angle as a short ad | A creator researches the buyers of a language course and scripts three angles to test against each other. |
| Software and apps | In-house growth teams | Type notes into a script’s feedback field and call the revision action | A growth lead asks for a shorter, calmer version, and the script is rewritten in place. |
Skip it if you do not use Airtable or run Facebook video ads. Both are built in, and the script prompt is written for Facebook ad video.
Any n8n that your Airtable can reach over the internet, because Airtable makes the calls.
Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. The file holds no credential, and the Airtable base is not in it, so build the base first.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server with an address Airtable can reach |
| Airtable | A base with Product, Scripting and Ads Performance tables, and a personal access token that can read and write it |
| Perplexity | An API key, kept in n8n as an HTTP Header Auth credential |
| Google AI Studio | A key for the Gemini API |
| OpenAI | An API key, for parsing the angles and for transcripts |
| A Marketing API access token that can read ads, for the weekly job | |
| Scrapfly | An API key, only for the transcript flow |
workflow.json.YOUR_BASE_ID and each table in YOUR_PRODUCT_TABLE_ID, YOUR_SCRIPTING_TABLE_ID or YOUR_ADS_TABLE_ID.Authorization and your Perplexity key, and select it in Product Overview & Customer Research.HTTP Request1, put your Scrapfly key where it says YOUR_SCRAPFLY_KEY.Webhook and Webhook1, and point your Airtable buttons or automations at them.Call the ai-vsl address with two values in its query string: action, and recordId, the Airtable record to work on. The action decides which table the record belongs to.
| Action | Record from | What happens | Written back |
|---|---|---|---|
| generateProjectDetails | Product | Perplexity writes a profile of the product and its buyers from Product Name and Product Notes | Product Details, and Status |
| generateAngles | Product | Gemini proposes five to eight angles from the profile, the notes, the winning scripts and the angles you already have | One Scripting row per angle |
| generateScript | Scripting | Gemini writes the full script for that angle | Script, and Status |
| feedbackIteration | Scripting | Gemini rewrites the script from your notes | Script, and Status |
The second address, ad-scraping, takes the recordId of an Ads Performance row and transcribes that ad’s video into its Video Script field. The weekly job needs no call: it starts from its own schedule.
A shop adds a water bottle to the Product table with a few notes. The first action returns a profile of the product and who buys it. The second adds Scripting rows, one per angle, with these fields filled:
{
"AngleHeadline": "…",
"ConceptSummary": "…",
"VSLStructure": "…",
"VideoSuggestion": "…",
"EmotionalTriggers": "…",
"CognitiveBiasesLeveraged": "…",
"DirectResponseTechniques": "…"
}A call is a plain GET, with your own address and record ID:
GET https://YOUR-N8N-ADDRESS/webhook/ai-vsl?action=generateAngles&recordId=YOUR_RECORD_ID
Calling generateScript on one of those rows fills Script with Markdown that opens straight on the hook, with no introduction, and runs through Hook, Lead, Body and CTA. Put notes in the feedback field and call feedbackIteration to get a rewrite.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This file is large, but three notes name its groups: Weekly Ad Schedule, Best Ad Video Transcript and Scripting/Idea Generation/Feedback System. Set up the last group first and get research, angles and scripts working before you touch Facebook.
For experts. Five models and services share the work, and each step names its own.
| Step | Model | What to know |
|---|---|---|
| Research | Perplexity sonar-reasoning, through an HTTP Request node | The request text lives in Edit Fields2, and a header-auth credential carries the key |
| Angles | Gemini, models/gemini-2.5-pro-exp-03-25 | An experimental model id. If the node reports that it is gone, pick a current Gemini Pro model |
| Parsing the angles | OpenAI gpt-4o-mini with a Structured Output Parser | The schema requires seven fields per angle and allows no others |
| Scripts and revisions | The same Gemini model | The script prompt fixes the four-part layout. The revision prompt is short, so your notes carry the change |
| Transcripts | OpenAI audio transcription | The file sets no model, so the node uses its default |
Every part bills its own provider, and two parts are fragile.
Time and Feedback, while the file’s own Scripting schema names those fields 3️⃣ Select Script Length and 4️⃣ Feedback. Make the names and the expressions agreeAirtable9 creates a row for every active video ad each week and never updates an old one, so the table fills with repeatsEdit Fields6 reads them from actions[4] and action_values[8], positions that suit one account’s data. Check them against yoursWait node holds 30 with no unit, and n8n’s default unit is seconds, so it pauses 30 seconds. Set minutes there if you meant themAn n8n workflow. Call its webhook with a record from your Airtable base, and it researches a product, proposes ad angles,
writes a video sales letter script for the angle you pick and rewrites it from your notes. A weekly job also logs your
active Facebook video ads, and a second webhook transcribes the video of a logged ad.
workflow.json: the workflow as n8n exports it, 54 nodes in three groups. It holds no credential, none of its author'sWeekly Ad Schedule, Best Ad Video Transcript andScripting/Idea Generation/Feedback System.README.md: these notes.One repair: the original copy of the file had lost three backslashes. Mindket put them back in Code1 (the pattern that finds
the video address, and its & clean-up) and in the line join of Generate Angles.
The nodes read and write these fields. Names are as the file writes them, emoji included.
| Table | Fields the workflow uses |
|---|---|
| Product | Product Name, Product Notes, Product Details, Status, 2️⃣ Generate Angles, Winning Ad Script, Angle Headline, and a link to Scripting |
| Scripting | AngleHeadline, ConceptSummary, VSLStructure, VideoSuggestion, EmotionalTriggers, CognitiveBiasesLeveraged, Direct Response Techniques, Script, Status, 5️⃣ Generate Script, About Product, a link to Product, and the length and feedback fields |
| Ads Performance | Ad Name, Ad ID, Video ID, Campaign Name, AdSet Name, Active Status, Spend, Impressions, Clicks, CPC, CPM, Conversions, Conversion Value, Best Ads?, Video Script |
Status on Product takes Idle, Generating Product Details, Generating Angles, Product Details Generated and Angles Generated.
On Scripting it takes Idle, Generating Script, Revision in progress, Script Generated and Script Revised.
In the file's schema, Winning Ad Script and Angle Headline on Product and About Product on Scripting are read-only, so
build them as lookups into the linked tables.
workflow.json.YOUR_BASE_ID, and theYOUR_PRODUCT_TABLE_ID, YOUR_SCRIPTING_TABLE_ID or YOUR_ADS_TABLE_ID, then select the credential.Authorization, value Bearer and your Perplexity key. Select it inProduct Overview & Customer Research.OpenAI Chat Model1 and OpenAI.Get FB Ad Accounts, Get Ad Campaigns,Get FB Ad Sets, Get FB Ad Contents and Facebook Graph API10.HTTP Request1 and replace YOUR_SCRAPFLY_KEY with your Scrapfly key.Webhook and Webhook1, copy their productionBoth webhooks use GET. A button field with an Open URL formula, or an automation with a script step, can make the call.
| Address | Query | What happens |
|---|---|---|
| ai-vsl | action=generateProjectDetails&recordId=<Product record> | Perplexity profiles the product and its buyers. Product Details is filled |
| ai-vsl | action=generateAngles&recordId=<Product record> | Gemini adds five to eight rows to Scripting |
| ai-vsl | action=generateScript&recordId=<Scripting record> | Gemini fills Script |
| ai-vsl | action=feedbackIteration&recordId=<Scripting record> | Gemini rewrites Script from the feedback field |
| ad-scraping | recordId=<Ads Performance record> | The ad's video is fetched and transcribed into Video Script |
The weekly job starts from Schedule Trigger2, so it needs no call.
The job lists your ad accounts, then their campaigns and ad sets, and keeps only those whose status is ACTIVE. For each ad set
it reads the ads with their results to date, keeps the active ones that have results and a video, and creates one Ads
Performance row per ad. The transcript flow reads that row and asks the Graph API for the video's page. Scrapfly loads that page in a
browser, the flow looks through the page's JSON for the video address, and OpenAI transcribes the downloaded file.
Generate Angles, and the count of five to eight is in its prompt.Basic LLM Chain1 and Basic LLM Chain2.Edit Fields2.Schedule Trigger2, and the ad fields it reads are in the fields query ofGet FB Ad Contents.Script. Copy the old text first if you want to keep it.Time and Feedback, but the file's own Scripting schema calls them3️⃣ Select Script Length and 4️⃣ Feedback. Make the field names and the expressions agree.Update Product Details clears 2️⃣ Generate Angles and leaves 1️⃣ Generate Product Details as it was.Airtable9 creates a new row for each active video ad every week and never updates an older one.Edit Fields6 takes conversions from actions[4] and conversion value from action_values[8]. Those positions fit oneWait holds 30 with no unit, and n8n's default unit is seconds, so it pauses 30 seconds. Set minutes there if youmodels/gemini-2.5-pro-exp-03-25. If it is gone, pick a current one.README.md 7 KB workflow.json 111 KB
Updated by Mindket to the current version of this kit.
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
nerijs · Kit
A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…
LiconStudio · Kit
Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…