Skip to main content
POST
/
intents
/
accounts
/
stack
/
preview
Preview companies by tech stack
curl --request POST \
  --url https://app.pipecorn.com/api/v2/intents/accounts/stack/preview \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "stacks": [
    "shopify",
    "webflow"
  ],
  "stack_match": "or",
  "excluded_stacks": [
    "wordpress"
  ],
  "countries": [
    "US",
    "FR"
  ],
  "included_industries": [
    "2190",
    "34"
  ],
  "excluded_industries": [
    "27"
  ],
  "company_size": [
    "11-50",
    "51-200"
  ]
}
'
import requests

url = "https://app.pipecorn.com/api/v2/intents/accounts/stack/preview"

payload = {
    "stacks": ["shopify", "webflow"],
    "stack_match": "or",
    "excluded_stacks": ["wordpress"],
    "countries": ["US", "FR"],
    "included_industries": ["2190", "34"],
    "excluded_industries": ["27"],
    "company_size": ["11-50", "51-200"]
}
headers = {
    "X-API-KEY": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'POST',
  headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    stacks: ['shopify', 'webflow'],
    stack_match: 'or',
    excluded_stacks: ['wordpress'],
    countries: ['US', 'FR'],
    included_industries: ['2190', '34'],
    excluded_industries: ['27'],
    company_size: ['11-50', '51-200']
  })
};

fetch('https://app.pipecorn.com/api/v2/intents/accounts/stack/preview', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://app.pipecorn.com/api/v2/intents/accounts/stack/preview",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'stacks' => [
        'shopify',
        'webflow'
    ],
    'stack_match' => 'or',
    'excluded_stacks' => [
        'wordpress'
    ],
    'countries' => [
        'US',
        'FR'
    ],
    'included_industries' => [
        '2190',
        '34'
    ],
    'excluded_industries' => [
        '27'
    ],
    'company_size' => [
        '11-50',
        '51-200'
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json",
    "X-API-KEY: <api-key>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://app.pipecorn.com/api/v2/intents/accounts/stack/preview"

	payload := strings.NewReader("{\n  \"stacks\": [\n    \"shopify\",\n    \"webflow\"\n  ],\n  \"stack_match\": \"or\",\n  \"excluded_stacks\": [\n    \"wordpress\"\n  ],\n  \"countries\": [\n    \"US\",\n    \"FR\"\n  ],\n  \"included_industries\": [\n    \"2190\",\n    \"34\"\n  ],\n  \"excluded_industries\": [\n    \"27\"\n  ],\n  \"company_size\": [\n    \"11-50\",\n    \"51-200\"\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("X-API-KEY", "<api-key>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://app.pipecorn.com/api/v2/intents/accounts/stack/preview")
  .header("X-API-KEY", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"stacks\": [\n    \"shopify\",\n    \"webflow\"\n  ],\n  \"stack_match\": \"or\",\n  \"excluded_stacks\": [\n    \"wordpress\"\n  ],\n  \"countries\": [\n    \"US\",\n    \"FR\"\n  ],\n  \"included_industries\": [\n    \"2190\",\n    \"34\"\n  ],\n  \"excluded_industries\": [\n    \"27\"\n  ],\n  \"company_size\": [\n    \"11-50\",\n    \"51-200\"\n  ]\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://app.pipecorn.com/api/v2/intents/accounts/stack/preview")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"stacks\": [\n    \"shopify\",\n    \"webflow\"\n  ],\n  \"stack_match\": \"or\",\n  \"excluded_stacks\": [\n    \"wordpress\"\n  ],\n  \"countries\": [\n    \"US\",\n    \"FR\"\n  ],\n  \"included_industries\": [\n    \"2190\",\n    \"34\"\n  ],\n  \"excluded_industries\": [\n    \"27\"\n  ],\n  \"company_size\": [\n    \"11-50\",\n    \"51-200\"\n  ]\n}"

response = http.request(request)
puts response.read_body
{
  "total_count": 428,
  "preview": [
    {
      "name": "Acme",
      "domain": "acme.com",
      "website": "https://acme.com",
      "industry": "Software Development",
      "location": "Paris France",
      "city": "Paris",
      "country": "France",
      "linkedin_url": "https://linkedin.com/company/acme",
      "technologies_found": [
        {
          "technology_name": "Shopify",
          "confidence": "high",
          "job_mentions": 3
        }
      ]
    }
  ]
}
{
  "error": 123,
  "message": "<string>"
}
{
  "error": 123,
  "message": "<string>"
}
Size a segment of companies by the technologies they use before spending any credits. This is the free, first step of the two-step tech-stack search:
  1. Preview (this endpoint) — returns the exact total match count plus a blurred company sample. No credits.
  2. Extract — starts an async import and delivers the full company records to your webhook. Spends enrichment credits.
Technographics are powered by TheirStack.

Credits and rate limits

  • Credits: free — no credits are spent
  • Authentication: standard v2 scheme (X-API-KEY)

Resolving technology slugs

stacks and excluded_stacks take technology slugs, not display names. Resolve names to slugs with the Technology slug lookup endpoint.

Example request

{
  "stacks": ["shopify", "webflow"],
  "stack_match": "or",
  "countries": ["US", "FR"],
  "included_industries": ["2190"],
  "company_size": ["11-50", "51-200"]
}

Example response

{
  "total_count": 428,
  "preview": [
    {
      "name": "Acme",
      "domain": "acme.com",
      "website": "https://acme.com",
      "industry": "Software Development",
      "location": "Paris France",
      "city": "Paris",
      "country": "France",
      "linkedin_url": "https://linkedin.com/company/acme",
      "technologies_found": [
        { "technology_name": "Shopify", "confidence": "high", "job_mentions": 3 }
      ]
    }
  ]
}
Company identifiers in the preview may be blurred; total_count is exact. For the complete list of industry IDs used by included_industries / excluded_industries, see the LinkedIn Industry List.

Authorizations

X-API-KEY
string
header
required

Body

application/json
stacks
string[]
required

Technology slugs to match. Resolve names to slugs with GET /accounts/technologies.

Example:
["shopify", "webflow"]
stack_match
enum<string>
default:or

How stacks combine. or matches companies using any listed technology; and requires all of them.

Available options:
or,
and
Example:

"or"

excluded_stacks
string[]

Technology slugs to exclude.

Example:
["wordpress"]
countries
string[]

ISO country codes, OR-matched against the company's country.

Example:
["US", "FR"]
included_industries
string[]

LinkedIn industry IDs to include, OR-matched.

Example:
["2190", "34"]
excluded_industries
string[]

LinkedIn industry IDs to exclude.

Example:
["27"]
company_size
enum<string>[]

Company size display buckets to include.

Available options:
Self-employed,
1-10,
11-50,
51-200,
201-500,
501-1000,
1001-5000,
5001-10000,
10001+
Example:
["11-50", "51-200"]

Response

Preview count and blurred company sample

total_count
integer
required

Exact number of matching companies.

Example:

428

preview
object[]
required

Sample of matching companies (up to 25). Company identifiers may be blurred; the count is exact.