# g2 Product Enrichment (`coder_luuffy/g2-product-enrichment`) Actor

Enriches any G2 product with the vendor's website, Twitter and LinkedIn, plus pricing plans, features, integrations and alternatives, so a list of G2 products becomes a list of contactable companies.

- **URL**: https://apify.com/coder\_luuffy/g2-product-enrichment.md
- **Developed by:** [coder\_luuffy](https://apify.com/coder_luuffy) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 2 monthly users, 97.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## G2 Product Enrichment

Give it a G2 product, get back the company behind it — **website, social profiles, published
contact details and tech stack** — plus every other field G2 holds for that product.

```
postman  ->  https://www.postman.com
             info@postman.com  ·  +1 888 616 1665
             LinkedIn · X · Instagram · Facebook · YouTube · GitHub · Discord
             Cloudflare, AWS, CloudFront
             San Francisco, CA · founded 2014
             + 45 more fields
```

### What it does

A G2 category listing gives you a product name and a rating. It gives you no way to reach the
company. This Actor closes that gap: point it at a product and it returns the vendor's website,
then reads that website to pull out the contact details and social profiles published on it —
along with the full G2 profile: pricing plans, features, integrations, alternatives, screenshots
and reviewer pros and cons.

Built for turning a list of software products into a list of companies you can research, compare
or contact.

### What you get, and how often

Measured on a random sample of 30 products spanning well-reviewed and long-tail vendors:

| | Coverage |
|---|---|
| **Website** | 100% |
| **Detected technologies** — CDN, hosting, analytics, categorised | 87% |
| **Social profiles** — 17 platforms: LinkedIn, X, Instagram, Facebook, YouTube, GitHub, Discord, TikTok, Reddit, Telegram, Bluesky and more | 67% |
| **Email** | 23% |
| **Phone** | 17% |

Emails and phones are only there when the vendor publishes them on its own site, so treat them as
a bonus on top of the website and socials rather than the main event. Worth knowing: **smaller
vendors publish contact details more often than large ones** — 40% of products with under 50
reviews returned an email, against 7% of the heavily-reviewed ones, because big companies route
you through a contact form instead.

Every contact carries the **pages it was found on** and an `is_likely_official` flag, so you can
tell a company's main address apart from a recruiter's or a press contact's.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `products` | array of strings | required | G2 product slugs or full G2 product URLs |
| `requestTimeoutSecs` | integer | `60` | Per-request timeout, `10` to `180` |

```json
{
  "products": [
    "postman",
    "https://www.g2.com/products/slack/reviews",
    "monday-crm"
  ]
}
```

Both forms work and can be mixed:

```
postman
https://www.g2.com/products/postman/reviews
https://www.g2.com/products/postman
www.g2.com/products/monday-crm/reviews?page=2
```

Duplicates are collapsed, so a product is never fetched or billed twice in one run. An entry that
resolves to neither a slug nor a product URL is skipped with a warning and the run continues.

### Output

One item per requested product.

```json
{
  "productSlug": "postman",
  "product_name": "Postman",
  "likely_product_website": "https://www.postman.com",
  "primaryEmail": "info@postman.com",
  "primaryPhone": "+18886161665",
  "linkedin": "https://www.linkedin.com/company/3795851/",
  "twitter": "https://twitter.com/getpostman",
  "company_location": "San Francisco, CA",
  "company_founded_year": 2014,
  "rating": 4.6,
  "reviews": 1800,
  "website_contacts": {
    "emails": [
      {
        "value": "info@postman.com",
        "is_likely_official": true,
        "sources": ["https://www.postman.com/company/contact-us/"]
      }
    ],
    "phones": [{ "value": "+18886161665", "is_likely_official": true, "sources": ["..."] }],
    "linkedins": [{ "value": "...", "is_likely_official": true, "sources": ["..."] }],
    "githubs": [{ "value": "https://github.com/postmanlabs", "is_likely_official": true }],
    "technologies": [{ "name": "Cloudflare", "categories": ["CDN"] }]
  },
  "pricing_plans": [{ "plan_name": "Free Plan", "price": 0, "plan_features": ["..."] }],
  "features": ["...19 groups..."],
  "integrations": { "count": 47, "items": ["..."] },
  "alternatives": ["...10 products..."],
  "pros": ["Ease of Use"],
  "cons": ["Slow Performance"],
  "error": null
}
```

`primaryEmail` and `primaryPhone` are lifted to the top level — the best official entry, falling
back to the first — so a CSV or spreadsheet export is usable without unpacking nested objects. The
full `website_contacts` object is always there when you want every address, number and profile.

The Output tab opens on a **Contact & enrichment** view, with an **All fields** view alongside it
covering all 49 fields.

#### Failures

A product that cannot be fetched still produces a row, so nothing disappears silently:

```json
{ "productSlug": "this-does-not-exist", "error": "Not Found" }
```

Requests are retried up to 3 times on timeouts and transient errors. **Failed products are never
charged** — billing happens per successfully enriched product.

### Pairs with G2 Category Listings

Run **[G2 Category Listings](https://apify.com/coder_luuffy/g2-scraper)** to get every product in a
category, then feed those `productSlug` values in here to turn a category into a contactable list.

### Performance

Products are processed concurrently, so a batch of 100 finishes in roughly two minutes rather than
ten.

# Actor input Schema

## `products` (type: `array`):

G2 product slugs (e.g. "postman") or full G2 product URLs (e.g. "https://www.g2.com/products/postman/reviews"). One result is returned per product.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout. Requests are retried up to 3 times.

## Actor input object example

```json
{
  "products": [
    "postman",
    "slack"
  ],
  "requestTimeoutSecs": 60
}
```

# Actor output Schema

## `products` (type: `string`):

Website, social profiles, contact details, tech stack and full G2 product detail.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "products": [
        "postman"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("coder_luuffy/g2-product-enrichment").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "products": ["postman"] }

# Run the Actor and wait for it to finish
run = client.actor("coder_luuffy/g2-product-enrichment").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "products": [
    "postman"
  ]
}' |
apify call coder_luuffy/g2-product-enrichment --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,coder_luuffy/g2-product-enrichment"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uAYB35hyH5JGziG2t/builds/9k06paymWtCydalK7/openapi.json
