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:
- User enters their work email
- You extract the domain and call Orsa
- Pre-fill company name, logo, colors, and industry
- 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
| Step | Endpoint | Credits |
|---|---|---|
| Prefetch (on email input) | POST /v1/brand/prefetch-by-email | 0 |
| Retrieve (on submit) | GET /v1/brand/retrieve-by-email | 10 |
| Total per sign-up | 10 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.