npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

orangeslice

v2.6.0

Published

B2B LinkedIn database prospector - 1.15B profiles, 85M companies

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 orangeslice

The 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:
    1. configure({ apiKey })
    2. ORANGESLICE_API_KEY env var
    3. ~/.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 status

Install as a dependency when writing app code:

npm install orangeslice
bun add orangeslice
pnpm add orangeslice
yarn add orangeslice

Integrations & 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/enrich
  • services.company.findCareersPage/scrapeCareersPage
  • services.crunchbase.search (returns rows array directly)
  • services.company.getEmployeesFromLinkedin (database-only B2B path)
  • services.ocean.search.companies/people
  • services.person.linkedin.search/enrich
  • services.web.search/batchSearch
  • services.ai.generateObject
  • services.scrape.website
  • services.browser.execute
  • services.apify.runActor
  • services.googleMaps.scrape
  • services.geo.parseAddress
  • services.builtWith.lookupDomain/relationships/searchByTech
  • integrations.connect/list/get/create/update/delete
  • skills.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/* and https://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 docs

Maintainer notes

  • Canonical docs are synced from ../lib/vfs/sheet-chat via npm run sync-docs.
  • prepublishOnly runs docs sync and TypeScript build.

Restrictions

  • No direct contact data (email/phone)
  • No Indeed job board data
  • No traffic/analytics data