orangeslice
v2.6.0
Published
B2B LinkedIn database prospector - 1.15B profiles, 85M companies
Maintainers
Readme
orangeslice
Orangeslice provides a services.* API for B2B research, enrichment, scraping, and AI helpers.
Quick start
npx orangeslice
bunx orangeslice
pnpm dlx orangeslice
yarn dlx orangesliceThe CLI copies docs to ./orangeslice-docs, creates ./orangeslice-docs/AGENTS.md, initializes package.json when missing, installs orangeslice in the current directory, opens browser auth, and stores your API key in ~/.config/orangeslice/config.json.
Auth behavior
- Any supported runner (
npx,bunx,pnpm dlx,yarn dlx) uses browser-based device auth and auto-provisions an API key. - SDK credential precedence:
configure({ apiKey })ORANGESLICE_API_KEYenv var~/.config/orangeslice/config.json
CLI auth commands
# One-time setup (also runs on plain `npx orangeslice` / `bunx orangeslice` when unauthenticated)
npx orangeslice login
bunx orangeslice login
pnpm dlx orangeslice login
yarn dlx orangeslice login
# Force re-auth and replace local stored key
npx orangeslice login --force
bunx orangeslice login --force
# Remove locally stored key
npx orangeslice logout
bunx orangeslice logout
# Show current auth source (env or config file)
npx orangeslice auth status
bunx orangeslice auth statusInstall as a dependency when writing app code:
npm install orangeslice
bun add orangeslice
pnpm add orangeslice
yarn add orangesliceIntegrations & Skills
import { integrations, skills } from "orangeslice";
// Connect a third-party service (opens browser for OAuth)
await integrations.connect("hubspot");
// Execute integration methods directly
const contact = await integrations.hubspot.createContact({
properties: { email: "[email protected]", firstname: "John" }
});
await integrations.instantly.addLeadsToCampaign({
campaignId: "abc-123",
leads: [{ email: "[email protected]" }]
});
await integrations.slack.chatPostMessage({ channel: "#leads", text: "New lead!" });
// List connected integrations
const { integrations: list } = await integrations.list();
// Create a knowledge skill
await skills.create({ title: "ICP", description: "Ideal customer profile criteria", content: "B2B SaaS, 50-500 employees..." });Public API (services-first)
Use services.* as the primary API surface.
import { services } from "orangeslice";
const [companies, searchPage, ai] = await Promise.all([
services.company.linkedin.search({
sql: "SELECT * FROM linkedin_company WHERE domain = 'stripe.com' LIMIT 5"
}),
services.web.search({ query: "site:linkedin.com/company stripe" }),
services.ai.generateObject({
prompt: "Extract company and founding year from: Stripe was founded in 2010.",
schema: {
type: "object",
properties: {
company: { type: "string" },
year: { type: "number" }
},
required: ["company", "year"]
}
})
]);
const startups = await services.crunchbase.search({
sql: `
SELECT name, website_url, linkedin_url
FROM public.crunchbase_scraper_lean
WHERE operating_status = 'Active'
LIMIT 10
`
});Service map
services.company.linkedin.search/enrichservices.company.findCareersPage/scrapeCareersPageservices.crunchbase.search(returns rows array directly)services.company.getEmployeesFromLinkedin(database-only B2B path)services.ocean.search.companies/peopleservices.person.linkedin.search/enrichservices.web.search/batchSearchservices.ai.generateObjectservices.scrape.websiteservices.browser.executeservices.apify.runActorservices.googleMaps.scrapeservices.geo.parseAddressservices.builtWith.lookupDomain/relationships/searchByTechintegrations.connect/list/get/create/update/deleteskills.list/get/create/update/delete
How routing works today
All service calls go through post() in src/api.ts.
- Execute paths:
https://enrichly-production.up.railway.app/execute/*andhttps://enrichly-production.up.railway.app/ctx/* - Pending responses (
pending: true/202) poll batch-service result endpoints. - Polling timeout supports long-running workflows (up to 10 minutes).
- This package now exposes only batch-backed services.
Docs installed by CLI
After running the CLI bootstrap command, you should have:
orangeslice-docs/
AGENTS.md
services/
prospecting/
...other synced docsMaintainer notes
- Canonical docs are synced from
../lib/vfs/sheet-chatvianpm run sync-docs. prepublishOnlyruns docs sync and TypeScript build.
Restrictions
- No direct contact data (email/phone)
- No Indeed job board data
- No traffic/analytics data
