One URL in. A whole brand out.
Category
Growth
Published Date
ElarisLabs Engineering

Summary
How ElarisLabs turns a single web address into a production-ready brand profile and a product link into a finished video, with ScrapeGraph as the engine under the hood.
Share this article
An AI-native creative operating system for brands
ElarisLabs generates on-brand creative across image, video and audio, and publishes it straight to Meta, TikTok and Snapchat. At its center is Iris, a conversational AI agent that takes a brand brief and returns channel-ready creative in minutes, not weeks. Every asset stays locked to your brand's colors, fonts and voice, because the platform learns your brand the moment you join.
Iris (AI agent): describe a campaign in plain language, and Iris plans it, generates the assets and assembles them, end to end.
Creative Studio: on-brand image generation with brand-lock applied to every prompt, so nothing drifts off-brand.
Video Studio: AI video, scripted, voiced and rendered to a finished MP4, with production handled programmatically.
Brand Pack: one creative, every aspect ratio, resized across channels automatically while staying perfectly on-brand.
Campaign Wizard: spin up a full multi-asset campaign from a single brief, with brand constraints baked in from the start.
Scheduler & Insights: publish directly to Meta, TikTok and Snapchat, then track what's working with brand-scoped analytics.
All that power is useless behind a blank form
Everything above only matters if a new brand can get started in seconds. The last thing someone joining ElarisLabs should do is spend twenty minutes uploading logos, eyedropping hex codes and dragging in product photos. And when they want a product video, they shouldn't re-type everything already sitting on an Amazon or Shopify page.
So to make onboarding instant, we reach for ScrapeGraph, the engine that turns a single URL into structured brand or product data. It's the first step in two of our highest-value flows. We wire it in through the scrapegraph-js v2 SDK behind a shared client, so the rest of ElarisLabs never thinks about scraping at all.
"Paste your website, we build your brand profile." Brand onboarding. Colors, fonts, logo, photos and AI-inferred personality, pre-filled in under 30 seconds.
"Paste a product link, we script a video." URL to Video. Extract name, price, hi-res media and features from real merchant pages, then generate.
One live page in. Structured data out.
Here is the whole idea on a single real product page. The messy, JavaScript-rendered, bot-protected page a shopper sees goes in. What ElarisLabs receives back from one extract() call is clean enough to drop straight into a video.
Buried price, a 62px thumbnail and a lazy gallery become clean JSON, with the image URL auto-upgraded to full resolution.
Two flows. One SDK.
Both flows converge on a single ScrapeGraph client, but they call different primitives tuned to their target pages. Data moves from the entry point, through the API, and back out to where ElarisLabs stores or renders it. Brand onboarding starts at the onboarding page (scrapeBrandData(), calling scrape()) and saves to Supabase. URL to Video starts at the UrlInput component (POST /api/product/scrape, calling extract()) and feeds the UrlVideoWizard. Both go through a shared getSgaiClient(), a lazy singleton around scrapegraph-js v2.
Two different primitives, chosen on purpose
scrape(): brand onboarding, for marketing and corporate sites.
Multi-format request in a single call
Native branding format extracts design tokens
images + json supplement photos and tagline
Lightweight mode: 'auto' fetch
extract(): URL to Video and Product Staging, for e-commerce pages.
LLM-guided structured extraction via JSON schema
Pulls name, price, features, hi-res images
Handles JavaScript-heavy, bot-protected pages
Heavy js + stealth + scrolls fetch
Part 1: paste a URL, get a brand profile
On the onboarding page, step zero is a website field. The user pastes qdb.qa or nike.com; ElarisLabs runs a scanning animation while ScrapeGraph works, then advances to a review form with everything pre-filled. If scraping fails, the user still proceeds to manual entry. Scraping is an accelerator, not a gate.
The server action scrapeBrandFromWebsite() authenticates the user via Supabase, calls scrapeBrandData(url), and returns a typed ScrapedBrandData object. One HTTP call asks ScrapeGraph for three formats at once:
branding, native brand intelligence: colors, typography, logo, favicon, OG image, spacing, framework hints, plus AI-inferred tone, energy and target audience.
images, photo gallery: raw page images populate the brand photo gallery, deduped and capped at 12 to keep the picker clean.
json, focused tagline pull: a tightly-scoped LLM extraction for the homepage slogan only, with a strict schema so the model can't hallucinate extra fields.
Normalising v2 data into ElarisLabs's shape
ScrapeGraph returns v2-shaped data; the client maps it into the legacy ScrapedBranding interface, validating and re-shaping along the way.
If the branding format fails entirely, ElarisLabs returns success: false, because the review UI depends on those fields, so a partial result isn't surfaced as a win. A helper, hasValidScrapedData(), guards against empty scrapes before treating a result as useful. Scraped logos and photos are then re-hosted via uploadExternalImageToSupabase() so generation pipelines never depend on third-party CDN uptime.
Brand creation is free, with no credit deduction. Scraping lives in the acquisition funnel, not behind a paywall.
What the scraped profile then powers
Once onboarding completes, brand context flows into every creative surface: the Studio brand picker, Brand Pack multi-ratio resizing, Video Studio constraints, Campaign Wizard, and Insights & Scheduler.
<30s from URL to a production-ready brand context
12 brand photos auto-collected and deduped
5 creative surfaces brand-locked downstream
3 formats fetched in a single API call
Part 2: from a product link to a finished video
URL to Video lives at /url-video, orchestrated by UrlVideoWizard.tsx. ScrapeGraph powers step one entirely and seeds step two. Everything after it is the ElarisLabs generation and rendering stack.
URL input (ScrapeGraph). Paste a product page URL, or enter details manually.
Media review (seeded). Confirm scraped images, videos, name, price, features.
Video settings. Duration, aspect ratio, language, target audience.
Script selection. LLM-generated script options from the scraped data.
Voiceover + preview. ElevenLabs TTS with word-level captions.
Render. Remotion template render to a final MP4.
A heavier fetch, on purpose
E-commerce product pages are JavaScript-rendered, lazy-loaded and bot-protected. So unlike onboarding's lightweight scrape, product extraction uses a single extract() call with a detailed prompt, a schema requiring only product_name, and a much heavier fetch config.
The prompt bakes in platform-specific instructions for Amazon, Flipkart, Shopify and Shopee, covering thumbnail-vs-full-size URL patterns, gallery containers, data-old-hires, srcset. The code notes this costs extra credits but materially improves hit-rate on exactly the merchant pages URL-to-video depends on.
Post-processing: upgrading every image to full-res
ScrapeGraph returns image URLs; ElarisLabs then runs upgradeImageUrl(), rewriting known CDN thumbnail patterns into their full-resolution equivalents.
Amazon: ._SX38_ → ._SL1500_
Flipkart: /image/128/ → /832/832
Shopify: strip _300x300 suffix
Shopee: strip _tn, bump resize
Cloudinary: bump w / h / q params
Generic: normalise to 1200px, q=95
Images are deduped by base URL (ignoring query strings), capped at 10 images and 5 videos. Price strings are cleaned locale-aware, and currency is detected from ISO code or symbol (₹→INR, €→EUR). The result is a normalised product object, clean enough to feed straight into script generation, voiceover and the Remotion render.
Same vendor, two tuned strategies
One SDK and API key serve both flows, but every dimension is tuned to its target pages.
ScrapeGraph API: scrape() for brand onboarding; extract() for URL to video.
Primary formats: branding, images, json; structured JSON via prompt + schema.
Fetch mode: auto (lightweight); js + stealth + 3 scrolls (heavy).
Target pages: marketing and corporate sites; e-commerce product pages.
Key outputs: logo, colors, fonts, personality, photos; name, price, hi-res images, videos, features.
Post-processing: hex validation, font roles, photo dedup; CDN URL upgrading, price parsing, dedup.
Persistence: Supabase brands table; in-memory wizard state, then render.
Fallback: manual form entry; manual product entry.
Not a background utility. The first mile.
Reduces time-to-value. Investors and users see a working brand profile or product video starting from a URL, not a blank form.
Two integrations, one vendor. Brand scrape() and product extract() share an SDK and key, but use strategies tuned per use case.
Feeds the platform loop. Scraped brand data powers Studio, Scheduler and Insights; scraped product data feeds URL-to-Video and Product Staging.
E-commerce-grade extraction. Stealth JS rendering plus platform-specific image upgrading makes URL-to-video viable on real merchant pages.
Every great creative starts with knowing the brand
That's where ElarisLabs begins, and ScrapeGraph is the engine that makes the first mile instant. Paste a URL, and within seconds the platform knows your colors, fonts, voice and products, ready to generate on-brand creative across image, video and audio. The blank form is gone; the work starts immediately.
URL → ScrapeGraph → structured brand data → ElarisLabs





