# Terraform Registry Scraper - Modules & Providers (`thirdwatch/terraform-registry-scraper`) Actor

Search public Terraform modules and export versions, providers, downloads, verification, publication dates, and bounded module-interface counts.

- **URL**: https://apify.com/thirdwatch/terraform-registry-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 terraform modules

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Terraform Registry Scraper

> Export structured public Terraform Registry infrastructure modules for discovery, comparison, monitoring, and governance.

### What you get

Search the public Terraform Registry catalog and save one deduplicated row per infrastructure module. Results include module address, version, provider, description, download count, verification, publication time, source identity, and bounded input, output, resource, and submodule counts. Use discovery inputs for market maps and exact-name inputs, when available, for stable monitoring cohorts.

### Output fields

| Field group | Description |
|---|---|
| Identity | Canonical `address`, display name, and source URL. |
| Release evidence | Current version or tag data and source timestamps when published. |
| Adoption signals | Public download, install, pull, star, or rating metrics available from the source. |
| Ownership and links | Public author, owner, project, repository, documentation, or homepage references. |
| Classification | Public tags, categories, keywords, packaging, or status values. |
| Provenance | Search query and named upstream source for traceable analysis. |

### Example output

```json
{"address":"terraform-aws-modules/vpc/aws","version":"6.0.1","provider":"aws","downloads":100000000,"verified":true,"publishedAt":"2026-07-01T00:00:00Z","inputCount":100,"url":"https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest"}
````

### Input parameters

| Parameter | Required | Description |
|---|---|---|
| `queries` | No | Up to five module search phrases. |
| `moduleAddresses` | No | Up to 25 namespace/name/provider addresses or URLs. |
| `provider` | No | Optional provider filter. |
| `verifiedOnly` | No | Restrict discovery to verified modules. |
| `maxResultsPerQuery` | Yes | Maximum modules per query; defaults to 25. |
| `maxResults` | Yes | Maximum unique modules across all modes; defaults to 100. |

At least one discovery or exact-name input is required. Result limits apply after cross-input deduplication, and only saved unique rows are charged.

### Use cases

- **Developers:** discover alternatives and compare public release evidence.
- **Platform teams:** monitor versions, tags, compatibility, and activity for a fixed portfolio.
- **Security teams:** build an evidence inventory before joining vulnerability and deployment data.
- **Product researchers:** map a developer ecosystem with repeatable queries and dated snapshots.

### Limitations

Only public registry modules are covered. The Actor deliberately excludes large README bodies and does not interpret module quality, security, or cloud cost from popularity and interface counts.

### Compared to alternatives

Current Apify Store alternatives include crawlerbros/terraform-registry-scraper and parseforge/terraform-registry-modules-scraper. Thirdwatch combines discovery and bounded monitoring inputs where the source permits them, saves canonical evidence URLs, deduplicates before charging, provides exactly four PPE tiers, and ships ten ready-to-save Task recipes plus a five-article workflow library. Compare current Store listings directly because competitor features and pricing can change.

### FAQ

#### Does this Actor access private packages or accounts?

No. It collects only metadata available from the public source and does not sign in, bypass access controls, or request private registry credentials.

#### How should I monitor a fixed portfolio?

Use exact names where supported, keep result limits explicit, save the input as an Apify Task, and retain dated datasets. Do not let an empty or failed run overwrite the previous successful snapshot.

#### Are popularity metrics quality or security scores?

No. Downloads, installs, pulls, stars, and ratings help prioritize review, but they do not replace vulnerability, provenance, license, maintainership, or internal deployment evidence.

#### Where can I find more workflows?

Visit [Thirdwatch developer-data scrapers](https://thirdwatch.dev/scrapers/terraform-registry-scraper) and the related [GitHub](https://apify.com/thirdwatch/github-repositories-scraper?fpr=9m2cd6), [npm](https://apify.com/thirdwatch/npm-package-scraper?fpr=9m2cd6), and [OSV](https://apify.com/thirdwatch/osv-vulnerability-scraper?fpr=9m2cd6) Actors.

Last verified: 2026-07

# Actor input Schema

## `queries` (type: `array`):

Keywords to search across public Terraform modules.

## `moduleAddresses` (type: `array`):

Exact namespace/name/provider addresses or Registry URLs.

## `provider` (type: `string`):

Optional provider filter such as aws, azurerm, or google.

## `verifiedOnly` (type: `boolean`):

Restrict discovery queries to modules verified by the Registry.

## `maxResultsPerQuery` (type: `integer`):

Maximum modules requested for each search query.

## `maxResults` (type: `integer`):

Maximum unique modules saved across all input modes.

## Actor input object example

```json
{
  "queries": [
    "aws vpc"
  ],
  "moduleAddresses": [],
  "provider": "",
  "verifiedOnly": false,
  "maxResultsPerQuery": 25,
  "maxResults": 100
}
```

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/terraform-registry-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/terraform-registry-scraper").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 '{}' |
apify call thirdwatch/terraform-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thirdwatch/terraform-registry-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Terraform Registry Scraper - Modules & Providers",
        "description": "Search public Terraform modules and export versions, providers, downloads, verification, publication dates, and bounded module-interface counts.",
        "version": "1.0",
        "x-build-id": "8TWQhcAfISEKSZYVQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thirdwatch~terraform-registry-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thirdwatch-terraform-registry-scraper",
                "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/thirdwatch~terraform-registry-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thirdwatch-terraform-registry-scraper",
                "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/thirdwatch~terraform-registry-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thirdwatch-terraform-registry-scraper",
                "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": [
                    "maxResultsPerQuery",
                    "maxResults"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "maxItems": 5,
                        "type": "array",
                        "description": "Keywords to search across public Terraform modules.",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "default": [
                            "aws vpc"
                        ]
                    },
                    "moduleAddresses": {
                        "title": "Exact module addresses",
                        "maxItems": 25,
                        "type": "array",
                        "description": "Exact namespace/name/provider addresses or Registry URLs.",
                        "items": {
                            "type": "string",
                            "maxLength": 300
                        },
                        "default": []
                    },
                    "provider": {
                        "title": "Provider filter",
                        "type": "string",
                        "description": "Optional provider filter such as aws, azurerm, or google.",
                        "default": ""
                    },
                    "verifiedOnly": {
                        "title": "Verified modules only",
                        "type": "boolean",
                        "description": "Restrict discovery queries to modules verified by the Registry.",
                        "default": false
                    },
                    "maxResultsPerQuery": {
                        "title": "Results per query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum modules requested for each search query.",
                        "default": 25
                    },
                    "maxResults": {
                        "title": "Maximum total results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum unique modules saved across all input modes.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
