Skip to main content
Join our Discord community for support, feature requests, and to connect with other users → discord.gg/2gzDYzfnKJ

🚀 Watch our launch video

See Orange Slice in action

What is Orange Slice?

Orange Slice is a TypeScript library built for sales. Write the logic, we figure out the order—no drag-and-drop, no manual connections, just code. Access a fully-typed library of data enrichments—from LinkedIn profiles to contact info to company intelligence. Just type services. and let your editor guide you.
  • LinkedIn Profiles - Full profile enrichment with work history, skills & education
  • Contact Info - Work emails, personal emails & phone numbers
  • Company Intel - Firmographics, financials, traffic & headcount trends
  • Employee Search - Find decision makers by title, department & seniority
  • AI Research - Deep research reports with live web access
  • Web Scraping - Extract data from any website with AI parsing

The ctx Object: Your Primary Interface

The ctx (context) object is your main way to interact with your workflow. Most commonly, you’ll use it to reference other columns in the same row:
// Get prospect data from other columns in the current row
const name = ctx.thisRow.get("Name");
const company = ctx.thisRow.get("Company");
const title = ctx.thisRow.get("Title");

// Generate personalized outreach message
const outreach = await services.ai.generateText({
  prompt: `Write a personalized cold email to ${name}, ${title} at ${company}. 
   Keep it under 100 words and focus on how we help sales teams save time.`,
  model: "gpt-5-mini",
});

return outreach.text;
Beyond reading cells, ctx lets you navigate between sheets, add rows, and control workflow execution. Learn more about ctx →

The services Object: Every Enrichment You Need

The services object gives you access to a fully-typed library of data enrichments. Just type services. and let your editor guide you:
// Combine ctx (reading cells) with services (enrichment)
const name = ctx.thisRow.get("Name");
const company = ctx.thisRow.get("Company");

const linkedin = await services.person.linkedin.findUrl({
  name,
  company,
});

return linkedin;
Explore all available services →

The webhook Object: Receive External Data

The webhook object allows your workflow to receive HTTP requests from external services, forms, and APIs:
// Receive form submissions or API webhooks
console.log(`Received ${webhook.method} request from ${webhook.ip}`);

// Automatically add webhook data to a sheet
webhook.addRootFieldsToSheet("Leads", true);

// Or process manually with custom logic
await ctx.sheet("Leads").addRow({
  email: webhook.body.email,
  name: webhook.body.name,
  source: webhook.query.source || "website",
  received_at: new Date(webhook.receivedAt).toISOString(),
});

return { success: true };
Learn about webhooks →

How It Works

Write TypeScript in Columns

Each column runs TypeScript code. Reference other columns with ctx.thisRow.get():
// Find a prospect's LinkedIn profile
const name = ctx.thisRow.get("Name");
const company = ctx.thisRow.get("Company");

const linkedin = await services.person.linkedin.findUrl({
  name,
  company,
});

return linkedin;

Workflows That Wire Themselves

Write the logic, we figure out the order. No drag-and-drop, no manual connections—just code.

Run at Scale

Process thousands of rows in parallel with automatic dependency resolution and progress tracking.

Get Started