# Backlink Opportunity Finder (`khadinakbar/backlink-opportunity-finder`) Actor

Find relevant public pages for resource links, guest posts, list mentions, directories, podcasts, and expert roundups. Returns structured, scored prospect URLs from live Google organic results. It discovers prospects; it does not guarantee a backlink or automate outreach.

- **URL**: https://apify.com/khadinakbar/backlink-opportunity-finder.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, Lead generation, MCP servers
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 backlink prospect founds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Backlink Opportunity Finder

Find public pages that may be relevant to a value-led link-building pitch. Give the Actor a topic, choose the prospect types you want, and receive one scored Google organic-search prospect per dataset row.

Use this when you need a reviewable shortlist of resource pages, guest-post guidelines, listicles, directories, podcast guest pages, or expert-roundup calls. Do not use it to infer that a publisher will place a link, to buy/exchange links, or to automate unsolicited outreach.

### Outputs

Each dataset row contains a public prospect URL, normalized domain, Google result title/snippet, exact search footprint, result position, opportunity type, and a transparent 0–100 relevance heuristic. `OUTPUT` supplies a compact terminal outcome; `RUN_SUMMARY` adds provider, filtering, and billing diagnostics.

Results come from current Google organic results via SerpApi. A search snippet is discovery evidence, not a crawl of the page and not a verification that the page accepts submissions.

### Inputs

| Input | Purpose |
| --- | --- |
| `keywords` | Up to ten topics, such as `project management software`. |
| `opportunityTypes` | Resource pages, guest-post guidelines, listicles, directories, podcasts, and/or expert roundups. |
| `targetDomain`, `excludeDomains` | Domains removed before any result is saved or charged. |
| `countryCode`, `languageCode` | Google result localization. |
| `maxResultsPerKeyword`, `maxPagesPerQuery` | Coverage and billable-result caps. |
| `minimumRelevanceScore` | Drops weak heuristic matches before saving. |

Example input:

```json
{
  "keywords": ["project management software"],
  "targetDomain": "example.com",
  "opportunityTypes": ["resource_page", "guest_post", "listicle"],
  "excludeDomains": ["competitor.example"],
  "countryCode": "US",
  "languageCode": "en",
  "maxResultsPerKeyword": 25,
  "minimumRelevanceScore": 35
}
````

### Pricing

Pay per event + platform usage is enabled. One validated prospect saved to the default dataset is **$0.006**; Actor-start and Apify platform usage are additional. The Actor announces the maximum possible dataset-event cost before it searches and never charges excluded, duplicate, low-score, invalid, or unpersisted rows.

### Limitations and responsible use

- The relevance score is a text-and-position heuristic, not a domain authority, traffic, spam, editorial-quality, or placement score.
- The Actor does not access private pages, discover email addresses, send messages, generate link-exchange offers, or guarantee a backlink.
- Search results vary by location, language, freshness, index coverage, and provider availability.
- Review every prospect and pitch only genuinely useful, contextually relevant material. Follow applicable publisher rules and Google’s spam policies; this Actor is for discovering public prospects, not manipulating rankings.

### Outcomes

- `COMPLETE`: all requested searches completed and qualifying prospects were saved.
- `PARTIAL`: useful prospects were saved but some search or storage operations failed.
- `VALID_EMPTY`: the searches ran successfully but returned no qualifying prospects.
- `INVALID_INPUT`: the request can be corrected by changing input.
- `CONFIG_ERROR`: the owner-managed SerpApi secret is unavailable.
- `UPSTREAM_FAILED`: every required search-provider request failed and no useful rows were saved.

# Actor input Schema

## `keywords` (type: `array`):

Use this when you need relevant link prospects for one or more topics. Add up to 10 phrases, for example "project management software" or "remote team collaboration". The actor combines each phrase with the selected prospect footprints.

## `targetDomain` (type: `string`):

Use this when you want to avoid returning pages from your own website. Enter a hostname or URL such as example.com. Leave blank if you do not have a domain to exclude.

## `opportunityTypes` (type: `array`):

Use this when you want specific public-page footprints. Choose resource pages, guest-post guidelines, listicles, directories, podcasts, or expert roundups. If empty, the actor searches resource pages, guest posts, and listicles.

## `excludeDomains` (type: `array`):

Use this when known competitors, marketplaces, or irrelevant publishers should be excluded. Enter hostnames such as competitor.com; subdomains are also excluded. Filtering happens before dataset events are charged.

## `countryCode` (type: `string`):

Use this when you need Google results localized to a two-letter country code. Enter values such as US, GB, or AU. The default is US; it affects result localization, not a publisher's verified location.

## `languageCode` (type: `string`):

Use this when you need results in a specific language. Enter a language code such as en, de, or es. The default is en; it does not translate page text.

## `maxResultsPerKeyword` (type: `integer`):

Use this when you need a strict per-keyword cap on saved, billable prospects. Enter 1 to 100; the default is 25. Duplicate, excluded, and low-relevance results do not count toward this cap.

## `maxPagesPerQuery` (type: `integer`):

Use this advanced limit to control SERP coverage and provider requests. Enter 1 to 5; the default is 1. This is a query-page cap, not a guaranteed number of returned prospects.

## `minimumRelevanceScore` (type: `integer`):

Use this when you want to discard weaker text matches before they are saved or charged. Enter 0 to 100; the default is 35. The score is a transparent heuristic based on keyword overlap, footprint cues, and result position, not a domain-authority metric.

## Actor input object example

```json
{
  "keywords": [
    "project management software"
  ],
  "targetDomain": "example.com",
  "opportunityTypes": [
    "resource_page",
    "guest_post"
  ],
  "excludeDomains": [
    "competitor.com"
  ],
  "countryCode": "US",
  "languageCode": "en",
  "maxResultsPerKeyword": 25,
  "maxPagesPerQuery": 1,
  "minimumRelevanceScore": 35
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset rows with public prospect URLs, relevance scores, result positions, search footprints, and source localization.

## `output` (type: `string`):

Stable result count, charges, warnings, and terminal outcome for agents and integrations.

## `runSummary` (type: `string`):

Detailed diagnostic record including provider attempts, filtering, saved-result counts, and terminal outcome.

# 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 = {
    "keywords": [
        "project management software"
    ],
    "opportunityTypes": [
        "resource_page",
        "guest_post",
        "listicle"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/backlink-opportunity-finder").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 = {
    "keywords": ["project management software"],
    "opportunityTypes": [
        "resource_page",
        "guest_post",
        "listicle",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/backlink-opportunity-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "project management software"
  ],
  "opportunityTypes": [
    "resource_page",
    "guest_post",
    "listicle"
  ]
}' |
apify call khadinakbar/backlink-opportunity-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/backlink-opportunity-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Backlink Opportunity Finder",
        "description": "Find relevant public pages for resource links, guest posts, list mentions, directories, podcasts, and expert roundups. Returns structured, scored prospect URLs from live Google organic results. It discovers prospects; it does not guarantee a backlink or automate outreach.",
        "version": "1.0",
        "x-build-id": "gvCDLzkR4vx3a7QgY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~backlink-opportunity-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-backlink-opportunity-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~backlink-opportunity-finder/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-backlink-opportunity-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~backlink-opportunity-finder/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-backlink-opportunity-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords or topics",
                        "minItems": 1,
                        "maxItems": 10,
                        "type": "array",
                        "description": "Use this when you need relevant link prospects for one or more topics. Add up to 10 phrases, for example \"project management software\" or \"remote team collaboration\". The actor combines each phrase with the selected prospect footprints.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "targetDomain": {
                        "title": "Your domain to exclude",
                        "type": "string",
                        "description": "Use this when you want to avoid returning pages from your own website. Enter a hostname or URL such as example.com. Leave blank if you do not have a domain to exclude."
                    },
                    "opportunityTypes": {
                        "title": "Prospect types",
                        "type": "array",
                        "description": "Use this when you want specific public-page footprints. Choose resource pages, guest-post guidelines, listicles, directories, podcasts, or expert roundups. If empty, the actor searches resource pages, guest posts, and listicles.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "resource_page",
                                "guest_post",
                                "listicle",
                                "directory",
                                "podcast",
                                "expert_roundup"
                            ]
                        }
                    },
                    "excludeDomains": {
                        "title": "Domains to exclude",
                        "type": "array",
                        "description": "Use this when known competitors, marketplaces, or irrelevant publishers should be excluded. Enter hostnames such as competitor.com; subdomains are also excluded. Filtering happens before dataset events are charged.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countryCode": {
                        "title": "Search country",
                        "type": "string",
                        "description": "Use this when you need Google results localized to a two-letter country code. Enter values such as US, GB, or AU. The default is US; it affects result localization, not a publisher's verified location.",
                        "default": "US"
                    },
                    "languageCode": {
                        "title": "Search language",
                        "type": "string",
                        "description": "Use this when you need results in a specific language. Enter a language code such as en, de, or es. The default is en; it does not translate page text.",
                        "default": "en"
                    },
                    "maxResultsPerKeyword": {
                        "title": "Maximum prospects per keyword",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Use this when you need a strict per-keyword cap on saved, billable prospects. Enter 1 to 100; the default is 25. Duplicate, excluded, and low-relevance results do not count toward this cap.",
                        "default": 25
                    },
                    "maxPagesPerQuery": {
                        "title": "Maximum Google pages per footprint",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Use this advanced limit to control SERP coverage and provider requests. Enter 1 to 5; the default is 1. This is a query-page cap, not a guaranteed number of returned prospects.",
                        "default": 1
                    },
                    "minimumRelevanceScore": {
                        "title": "Minimum relevance score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Use this when you want to discard weaker text matches before they are saved or charged. Enter 0 to 100; the default is 35. The score is a transparent heuristic based on keyword overlap, footprint cues, and result position, not a domain-authority metric.",
                        "default": 35
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
