Guides
Use Cases
Onboarding Flows

Pre-fill Onboarding with Brand Data

Reduce friction in your sign-up flow by auto-populating company information the moment a user enters their email or domain.

The Problem

Users abandon onboarding forms that ask too many questions. Company name, logo, industry, website — every field is a drop-off point.

The Solution

Use Orsa to pre-fill brand data automatically:

  1. User enters their work email
  2. You extract the domain and call Orsa
  3. Pre-fill company name, logo, colors, and industry
  4. User confirms and continues

Architecture

User enters email → Extract domain → Orsa API → Pre-fill form
     ↓                                              ↓
 ceo@stripe.com        stripe.com              Name: "Stripe"
                                               Logo: ✓
                                               Colors: ✓
                                               Industry: "Fintech"

Implementation

Step 1: Prefetch on Email Input

Trigger a free prefetch as soon as the user types their email — before they even submit the form.

// On email blur/change (debounced)
async function onEmailChange(email: string) {
  if (!isBusinessEmail(email)) return;
 
  // Free — warms the cache in the background
  await client.brand.prefetchByEmail({ email });
}

Step 2: Retrieve on Form Submit

When the user submits, the data is already cached and returns instantly.

async function onSubmit(email: string) {
  const brand = await client.brand.retrieveByEmail({ email });
 
  // Pre-fill the form
  setCompanyName(brand.name);
  setCompanyLogo(brand.logos[0]?.url);
  setPrimaryColor(brand.colors[0]);
  setIndustry(brand.industry);
}

Step 3: Let the User Confirm

Show the pre-filled data with an option to edit. Most users will just click "Continue."

<OnboardingForm>
  <CompanyCard
    name={brand.name}
    logo={brand.logos[0]?.url}
    color={brand.colors[0]}
    editable
  />
  <p>Is this your company?</p>
  <Button>Yes, continue</Button>
  <Button variant="ghost">Edit details</Button>
</OnboardingForm>

Full Example (Next.js)

import { Orsa } from 'orsa';
 
const orsa = new Orsa({ apiKey: process.env.ORSA_API_KEY });
 
// API route: POST /api/onboarding/prefetch
export async function POST(req: Request) {
  const { email } = await req.json();
 
  // Fire and forget — free, no credits
  await orsa.brand.prefetchByEmail({ email });
 
  return Response.json({ ok: true });
}
 
// API route: POST /api/onboarding/enrich
export async function POST(req: Request) {
  const { email } = await req.json();
 
  const brand = await orsa.brand.retrieveByEmail({ email });
 
  return Response.json({
    name: brand.name,
    domain: brand.domain,
    logo: brand.logos[0]?.url,
    color: brand.colors[0],
    industry: brand.industry,
    favicon: brand.meta?.favicon,
  });
}

Credit Cost

StepEndpointCredits
Prefetch (on email input)POST /v1/brand/prefetch-by-email0
Retrieve (on submit)GET /v1/brand/retrieve-by-email10
Total per sign-up10 credits

Tips

  • Always prefetch first. It's free and eliminates latency on the retrieve call.
  • Use the simplified endpoint if you only need logo + colors: 5 credits instead of 10.
  • Handle free email domains gracefully. Gmail, Yahoo, etc. will be rejected — show a "Please use your work email" message.
  • Cache brand data in your database after the first lookup to avoid repeat charges for the same company.