FREE APP + FULL SETUP / OPENAI DECISIONS FOR MARKETING
OpenAI Decisions makes ad research feel like cheating.
Give it the actual creative. Sort the hooks, formats, offers and proof. See the patterns, open the examples, and leave with an original ad brief you can shoot.
Open-source code · No-key demo · Visual analysis · Your own API keys
WHAT YOU GET
- A populated light-mode research demo
- Image pixels and sampled video frames sent to Decisions
- Seven useful labels, filters and linked examples
- Optional Meta Ad Library collection through Apify
- Original briefs and explicit review criteria
- Setup, troubleshooting and a portable guide
01 / THE FASTEST WAY IN
Open the demo before connecting anything.
This is a separate OpenAI edition of my Jev marketing project. Install Node.js 22.9 or newer. Download and extract the code, or clone it below. Open a terminal inside the folder containing package.json.
git clone https://github.com/artemnovitckii/openai-decisions-marketing.git
cd openai-decisions-marketing
npm ci
npm run setup
npm run doctor
npm startOpen http://127.0.0.1:5194/. The app opens on a completed sample report: thumbnail wall, creative map, findings, an example inspector and 24 briefs. Filter by format and hook. Click a point or image to inspect it. Press Replay demo run to watch the wall and map build together.
http://127.0.0.1:5194/variations.html?variant=reference&clean=1&duration=20The simulation needs no keys and makes no AI calls. The included starter artwork is fictional. The demo above uses a larger local public-image library. Sample labels, dates, grouping, scores and replay speed are invented for the interface.
Fill the wall with a large image library
Install FFmpeg using the next section, then download optional public reference images or use your own folder:
npm run demo:download
# Or use your own folder:
npm run demo:images -- /path/to/imagesImages are compressed and exact duplicates are removed. Public examples can include print ads and other marketing creatives, not only Meta ads. This image pack does not supply verified campaign dates or results. It stays local and is not included in the public repository.
Let a coding assistant set it up
Set up https://github.com/artemnovitckii/openai-decisions-marketing locally. Read README.md, docs/SETUP.md and docs/PRIVACY.md. Install dependencies, run setup, doctor, checks and tests, then start the no-key demo. Do not print secrets. For real analysis, ask me to add OPENAI_API_KEY to my local .env and start with five uploaded images. Do not launch paid collection without my instruction. Report exactly what was verified.02 / YOUR FIRST REAL ANALYSIS
It sees the creative, as well as the words.
The real classifier uses OpenAI's dedicated Decisions API, currently in public beta with gpt-6-luna. The request includes the actual image pixels, available ad copy and optional speech. It is not a text-only description of the image.
- Install FFmpeg and ffprobe using a command below.
- Create an OpenAI API key and put it in your local
.env. API access and billing are separate from a ChatGPT subscription. - Restart the server. Choose Import ads and upload five real static creative images you can check yourself.
- Click Analyze / retry unfinished. Static uploads need no Apify or speech key.
- Click a creative, then All labels & evidence. Inspect the exact submitted image, labels, confidence and provider information.
OPENAI_API_KEY=your_openai_key
ANALYSIS_PROVIDER=openai
PORT=5194Install FFmpeg
brew install ffmpegwinget install --id Gyan.FFmpeg --exactsudo apt update
sudo apt install ffmpegReopen the terminal and run npm run doctor. Both FFmpeg and ffprobe must be available. Other installers.
Add spoken words from video ads
The app sends up to four timestamped video frames. Add Fireworks or Groq if you also want the audio transcribed. Decisions itself does not transcribe speech.
TRANSCRIPTION_PROVIDER=fireworks
FIREWORKS_API_KEY=your_fireworks_keyTRANSCRIPTION_PROVIDER=groq
GROQ_API_KEY=your_groq_keyExisting transcripts can also be imported. Four sampled frames do not cover every scene, movement or spoken claim in the video. Check the original ad.
Upload local files, paste copy or import an existing JSON export. JSON and pasted copy replace the saved batch; uploads append. Export your current work first. Keys stay server-side, and the repository does not contain mine.
03 / THE RESEARCH LENS
Seven labels that lead to a useful test.
- Format
- Creator demo, testimonial, founder, product, comparison or graphic. What is the creative doing visually?
- Hook
- Customer frustration, curiosity, result, contradiction, offer or direct introduction. How does it open?
- Angle
- Convenience, performance, price, trust, experience or identity. What reason to care does it give?
- Offer
- Discount, bundle, subscription, trial, guarantee or no explicit offer.
- Proof
- Demonstration, testimonial, comparison, numbers or a named source. This describes evidence offered, not whether a claim is true.
- Objection
- Price, trust, effort, effectiveness or suitability. Which hesitation is addressed?
- CTA
- Buy, learn, sign up, book, message or no explicit next step.
Decisions returns typed choices and confidence. The app joins collection dates and active status afterward. Unknown is a valid answer when the available evidence is insufficient. You can change the comparison dimension, filter the wall, inspect examples and export the analysis.
04 / OPTIONAL META COLLECTION
Bring the Ad Library into the same view.
Add APIFY_TOKEN to .env, restart, and choose Meta collection. The connector uses the Facebook Ads Library scraper. Start with a focused category and a small batch.
- Paste public Ad Library or Facebook page URLs.
- Set a small maximum, such as 20 ads, and an Apify cap. Check the Actor's current pricing in your account.
- Click Start paid collection and inspect the run in Apify Console.
- Click Analyze collected ads separately to start classification.
Collection does not promise every ad. The Apify cap excludes OpenAI, speech and writing. If a launch response is lost, inspect the existing run and attach its ID instead of paying for another run. You can skip this stage entirely with your own files or JSON.
05 / FROM RESEARCH TO A SHOOT
Make something original from the pattern.
- Filter a promising format or hook. Check how many examples and families support the comparison.
- Inspect the opening, proof and offer in several source creatives. Study different and weaker approaches too.
- Open Your product → original briefs. Supply your audience, actual offer and facts you can support.
- Create up to six briefs. Without a writer configured, these are editable outlines. A separate compatible text model can write the drafts.
- Decisions reviews clarity, brand fit and claim support. Review the claims, shoot an original test, and measure it in your own account.
Enable the optional brief writer
LLM_BASE_URL=https://api.fireworks.ai/inference/v1
LLM_API_KEY=your_writer_provider_key
LLM_MODEL=your_available_text_model_idUse an available model that supports chat completions and JSON-object responses. Decisions handles classification and scoring, not prose generation. Its review scores are rubric judgments, not sales forecasts.
06 / COSTS, CHECKS & FIXES
Start small. Check what actually happened.
The demo has no provider charges. The documented Decisions base rate is $0.10 per million input tokens, with no output-token charge. Regional and long-context premiums can apply. The app estimates returned usage; it excludes Apify, speech, writing and unknown request costs. Official pricing and availability.
Missing key, 401, 403 or 429
Check the key name, save .env, restart, and check provider access, billing and quota. Doctor checks presence, not authentication. Completed records and cached results are retained. Fix the problem, then explicitly retry unfinished records.
Unknown label, missing media or speech
Inspect the submitted image or frames. Sparse evidence can legitimately be unknown. CDN media URLs can expire; upload the file or refresh the export. For speech, check FFmpeg and the selected transcription provider.
Where do my keys and creative files go?
Keys remain in your local .env; local uploads and caches stay in ignored data/. OpenAI receives the submitted images and available words. The speech provider receives audio; the writer receives reference text and product facts. Exports contain research data, so review them before sharing.
Open the demo. Then try five real creatives.
The repository contains the app, setup guide, data schema, recording controls and exact verification status.
Get the OpenAI Decisions marketing system
Unlock the code, setup guide and demo. Free, plus every resource in the library.
Moshn / AI automation agency
Want AI automation built for your business?
Moshn builds AI systems around the tools your team already uses, from lead qualification and follow-ups to onboarding and reporting.
Book a call. Tell us what your team is doing manually, and we'll show you what can be automated.