Company - Tech Stacks

Retrieve detected technologies and product installs for a company.

Fetch a company’s installed technology stack in three formats (choose what fits your integration):

  1. Paged JSON (stream).
  2. CSV export (file).
  3. JSONL stream.

Use Products‑in‑Use to verify specific product IDs with confidence.

Base URL: https://api.salescaddy.ai/api


Endpoints overview

  • Paged JSONPOST /companies/{companyDomain}/products/paged?page=0&size=20application/json

  • CSVGET /companies/{companyDomain}/products?export=truetext/csv (binary)
    Req

    uires header: X-On-Behalf-Of-User: <email>

  • JSONLGET /companies/{companyDomain}/products/json?export=falseapplication/jsonl

  • Verify (deterministic)POST /companies/{companyDomain}/products-in-use (body: { "productIds": [...] })

Path parameter

  • companyDomain — e.g., hilton.com

Common query parameters

  • page (int, default 0) — only for paged JSON
  • size (int, default 20, max ~200) — only for paged JSON
  • export (bool) — true for CSV; false for JSONL (explicit)

Paged JSON — standard API

Example Paged JSON

curl -X 'POST' \
  'https://api.salescaddy.ai/api/companies/stripe.com/products/paged?mainCategory=Sales%20Tools&mainCategory=Marketing%20Automation&export=false&page=0&size=2' \
  -H 'accept: application/json' \
  -H 'X-API-Key: YOUR_Api_key' \
  -d ''
const url = "https://api.salescaddy.ai/api/companies/hilton.com/products/paged?page=0&size=20";
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.TOKEN}` } });
console.log(await res.json());
import os, requests
r = requests.get("https://api.salescaddy.ai/api/companies/hilton.com/products/paged",
                 params={"page":0,"size":20},
                 headers={"Authorization": f"Bearer {os.environ['TOKEN']}"})
print(r.json())
var res = await http.GetAsync("https://api.salescaddy.ai/api/companies/hilton.com/products/paged?page=0&size=20");
Console.WriteLine(await res.Content.ReadAsStringAsync());
{
  "totalPages": 40,
  "totalElements": 79,
  "content": [
    {
      "id": "F74D6AAC72D62485ABA13994F96D74FE",
      "companyId": "B5244EF04E80EBC5E3847CFBFD8D0C8F",
      "company": "Stripe, Inc.",
      "companyDomain": "stripe.com",
      "industry": "Custom computer programming services",
      "city": "SF",
      "state": "California",
      "postalCode": "94103",
      "country": "United States",
      "revenueRange": "$1+ Billion",
      "employeeRange": "XLarge (5001+ Employees)",
      "vendorDomain": "crossbeam.com",
      "vendor": "Crossbeam",
      "vendorId": "4492bbf7-d3e0-4308-b10c-6b048a9fc3cb",
      "productId": "2483821f-fd6e-45cc-8487-8919cc91dec0",
      "product": "Crossbeam",
      "shortName": "Crossbeam",
      "imageUrl": "https://images.g2crowd.com/uploads/product/image/1f4fdaaaabe1fc91c86aa0e77c6ade9c/crossbeam.png",
      "productUrl": "https://www.crossbeam.com/how-it-works/pricing/",
      "publicDetailUrl": "https://www.g2.com/products/crossbeam/reviews",
      "reviewCount": 259,
      "starRating": 4.8,
      "avgRating": 9.55212,
      "mainCategory": "Partner Ecosystem Platforms",
      "mainCategoryId": "21ebfbfc-3cf7-48c8-93ee-9ca64a135d33",
      "dateFirstVerified": "2024-12-14T00:00:00Z",
      "dateLastVerified": "2025-10-31T00:00:00Z",
      "parentCategoryId": "d2512d8f-304a-410f-bc5a-d6c42a741cef",
      "parentCategory": "Partnerships Management",
      "level0CategoryId": "3fee2603-1544-44c3-942d-538da46922f7",
      "level0Category": "Sales Tools",
      "hitCount": 179
    },
    {
      "id": "6E7A82E117E5C45B3B5558B756ABE93A",
      "companyId": "B5244EF04E80EBC5E3847CFBFD8D0C8F",
      "company": "Stripe, Inc.",
      "companyDomain": "stripe.com",
      "industry": "Custom computer programming services",
      "city": "SF",
      "state": "California",
      "postalCode": "94103",
      "country": "United States",
      "revenueRange": "$1+ Billion",
      "employeeRange": "XLarge (5001+ Employees)",
      "vendorDomain": "leandata.com",
      "vendor": "LeanData, Inc.",
      "vendorId": "54d7bde1-e9e3-4b53-a930-fd5166182f0e",
      "productId": "4507df59-b490-47bd-966f-c59ebeff913f",
      "product": "LeanData",
      "shortName": "LeanData",
      "imageUrl": "https://images.g2crowd.com/uploads/product/image/4383ee9e1984ba48a78e9bfc9057ae2a/leandata.png",
      "productUrl": "https://www.leandata.com/services/",
      "publicDetailUrl": "https://www.g2.com/products/leandata/reviews",
      "reviewCount": 921,
      "starRating": 4.6,
      "avgRating": 9.1759,
      "mainCategory": "Lead-to-Account Matching and Routing",
      "mainCategoryId": "e7be7a9f-6de0-4ec3-99e3-23878acdf5ef",
      "dateFirstVerified": "2022-04-05T00:00:00Z",
      "dateLastVerified": "2022-11-22T00:00:00Z",
      "parentCategoryId": "43478080-f4e3-4eb3-8aae-09664df14726",
      "parentCategory": "Sales Acceleration",
      "level0CategoryId": "3fee2603-1544-44c3-942d-538da46922f7",
      "level0Category": "Sales Tools",
      "hitCount": 313
    }
  ]
}

CSV — full export (file)

Example CSV Export

curl -sS "https://api.salescaddy.ai/api/companies/hilton.com/products?export=true"   -H "Authorization: Bearer $TOKEN"   -H "X-On-Behalf-Of-User: [email protected]"   --output hilton-products.csv
import fs from "fs";
const url = "https://api.salescaddy.ai/api/companies/hilton.com/products?export=true";
const res = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.TOKEN}`, "X-On-Behalf-Of-User":"[email protected]" }
});
const file = fs.createWriteStream("hilton-products.csv");
await new Promise((resolve, reject) => {
  res.body.pipe(file);
  res.body.on("error", reject);
  file.on("finish", resolve);
});
import os, requests
with requests.get("https://api.salescaddy.ai/api/companies/hilton.com/products",
                  params={"export":"true"},
                  headers={"Authorization": f"Bearer {os.environ['TOKEN']}",
                           "X-On-Behalf-Of-User":"[email protected]"},
                  stream=True) as r:
    r.raise_for_status()
    with open("hilton-products.csv","wb") as f:
        for chunk in r.iter_content(8192):
            if chunk: f.write(chunk)
using System.Net.Http.Headers;
var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TOKEN);
http.DefaultRequestHeaders.Add("X-On-Behalf-Of-User","[email protected]");
var bytes = await http.GetByteArrayAsync("https://api.salescaddy.ai/api/companies/hilton.com/products?export=true");
System.IO.File.WriteAllBytes("hilton-products.csv", bytes);

Sample response (trimmed):

CSV snippet (sample):

companyDomain,productId,productName,vendorDomain,category,categoryId,intensity
hilton.com,prod_office365,Microsoft 365,microsoft.com,Productivity,cat_productivity,0.78
hilton.com,prod_slack,Slack,salesforce.com,Collaboration,cat_collab,0.55

CSV is ideal for bulk analytics and offline processing. Exports are attributed to the user in X-On-Behalf-Of-User.


JSONL — stream (line‑delimited JSON)

Example JSONL

curl -sS "https://api.salescaddy.ai/api/companies/hilton.com/products/json?export=false"   -H "Authorization: Bearer $TOKEN"
const url = "https://api.salescaddy.ai/api/companies/hilton.com/products/json?export=false";
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.TOKEN}` } });
console.log((await res.text()).split("\n").slice(0,3)); // first 3 lines
import os, requests
r = requests.get("https://api.salescaddy.ai/api/companies/hilton.com/products/json",
                 params={"export":"false"},
                 headers={"Authorization": f"Bearer {os.environ['TOKEN']}"})
print("\n".join(r.text.splitlines()[:3]))
var res = await http.GetAsync("https://api.salescaddy.ai/api/companies/hilton.com/products/json?export=false");
var text = await res.Content.ReadAsStringAsync();
Console.WriteLine(text.Split('\n')[0]); // first line

JSONL snippet (sample):

id,companyId,company,companyDomain,industry,city,state,postalCode,country,phone,revenueRange,employeeRange,vendorDomain,vendor,vendorId,productId,product,shortName,imageUrl,productUrl,publicDetailUrl,reviewCount,starRating,avgRating,mainCategory,mainCategoryId,dateFirstVerified,dateLastVerified,parentCategoryId,parentCategory,level0CategoryId,level0Category,hitCount
"0001C68CDB9179F4C50DEB9173C02967","FF5C054C7CD6924C570F944007CCF076","Microsoft Corporation",microsoft.com,"Computer related services",Redmond,Washington,98052,"United States",,"$1+ Billion","XLarge (5001+ Employees)",adobe.com,Adobe,"2c5c5125-75ca-4fad-908c-f65b32c7e3fc","3b83cb2f-a0ac-417d-8250-66d96975fe89","Adobe Sign","Adobe Acrobat Sign","https://images.g2crowd.com/uploads/product/image/655078e0d371d8c5d65524f6ae30a0ba/adobe-acrobat-sign.png","https://www.adobe.com/sign.html?sdid=8RVC5477&mv=partner","https://www.g2.com/products/adobe-acrobat-sign/reviews",928,4.4,8.7694,E-Signature,"527effa1-a42d-426a-85d5-654fe896424e",2011-09-09,2025-03-14,"3fee2603-1544-44c3-942d-538da46922f7","Sales Tools","3fee2603-1544-44c3-942d-538da46922f7","Sales Tools",596
"0002A38BB920957EDBABCA6DB79FC7F9","FF5C054C7CD6924C570F944007CCF076","Microsoft Corporation",microsoft.com,"Computer related services",Redmond,Washington,98052,"United States",,"$1+ Billion","XLarge (5001+ Employees)",visa.com,"Visa, Inc.","ba40d325a2881053bb8fb7e984448f4d","da62dc8b9914982b4185ae2427c60bdb",Visa,Visa,"https://logo.clearbit.com/visa.com",visa.com,visa.com,1456,3.2250133,3.1807396,"Financial Analysis","b93758c9-51b4-4df8-949c-0e5f3d822a11",2000-11-09,2024-08-15,"fcca2d47-1440-4ea5-aa17-55622d385d51","Accounting & Finance","8e0dbc8f-ac4a-4076-9eff-ac041b8b54c6",ERP,431
"00030FB7C8CA11EA4352F55361499F1B","FF5C054C7CD6924C570F944007CCF076","Microsoft Corporation",microsoft.com,"Computer related services",Redmond,Washington,98052,"United States",,"$1+ Billion","XLarge (5001+ Employees)",cloud.com,"spike cloud","e5bf47e6-d78f-499b-a90d-4144830fcb9c","5407779e-0aba-4307-9bf8-6e93e03c28ee",NetScaler,NetScaler,"https://images.g2crowd.com/uploads/product/image/8440da6cf91bc217a041207199078684/netscaler.jpg","https://www.netscaler.com/pricing","https://www.g2.com/products/netscaler/reviews",79,4.4,8.83544,"Load Balancing","402654c0-5db8-41d7-946c-19ef1e6c2b6e",2006-07-07,2025-06-25,"acb19eee-e37a-4a8e-a9d9-51ce9d52c79e",Hosting,"acb19eee-e37a-4a8e-a9d9-51ce9d52c79e",Hosting,3643
"0004852E0D8015BED11330B2973FA20C","FF5C054C7CD6924C570F944007CCF076","Microsoft Corporation",microsoft.com,"Computer related services",Redmond,Washington,98052,"United States",,"$1+ Billion","XLarge (5001+ Employees)",mcafee.com,McAfee,"3e92a895-1f52-43a5-9d52-1851745d0b5e","7b043cbf0171423698701c6dc93edeed","McAfee Email Gateway","McAfee Email Gateway","https://logo.clearbit.com/mcafee.com",mcafee.com,mcafee.com,1922,3.2165797,3.8644986,Email,"8451f4c3-4e2e-4a1c-8de7-7b65013f7ac1",2011-07-04,2012-05-06,"d8b66846-bba6-46a0-9791-dd6a5dceb6a8","Collaboration & Productivity","d8b66846-bba6-46a0-9791-dd6a5dceb6a8","Collaboration & Productivity",448
"0006BBE87D36120F15ACE09178B75D4D","FF5C054C7CD6924C570F944007CCF076","Microsoft Corporation",microsoft.com,"Computer related services",Redmond,Washington,98052,"United States",,"$1+ Billion","XLarge (5001+ Employees)",motivatedmodels.com,"Motivated Models","9bb762f5-7a31-40d9-8dfb-7bf4a0852903","c9a06919-aae4-4883-a77e-3a3215a3a7fe","Motivated Models","Motivated Models","https://images.g2crowd.com/uploads/product/image/d5c5751df56447525c204b108ce46c22/motivated-models.jpg","https://motivatedmodels.com/","https://www.g2.com/products/motivated-models/reviews",0,0.0,0.0,"Staffing .....

JSONL is great for streaming pipelines and incremental ingestion.


Prefer multiple pages over very large size values; this reduces timeouts and avoids 429 errors.


Tips & best practices

  • Choose CSV for bulk analytics, Paged JSON for interactive AND streaming apis or agent apps.
  • Choose mainCategory or mainCategoryId filters to filter only products you need.
  • Use Parent Categories to retrieve all products in the hierarchy. E.g. Sales Tools , Marketing Automation etc. Please refer G2 category hierarchies here: https://www.g2.com/categories?view_hierarchy=true
  • Reuse productId and categoryId across search and metrics endpoints.
  • Handle 401/429/5xx with retries (see Errors & Rate Limits).
  • For exports, always pass X-On-Behalf-Of-User and store files with timestamps/versioning.

Errors

CodeMeaningHow to fix
400Bad requestValidate path/query/body; check page/size are integers (when used).
401UnauthorizedProvide/refresh Bearer token.
403ForbiddenCheck permissions; for CSV include X-On-Behalf-Of-User.
404Not foundUnknown companyDomain or no products present.
429Rate limit exceededRetry with exponential backoff; respect Retry-After.
500Internal server errorRetry later; contact support if persistent.