# Get Technologies — Wappalyzer

> Returns the details of technologies used on a specific URL. See the documentation

- Key: `wappalyzer-get-technologies`
- Type: Action (Read-only)
- Version: 0.0.3
- App: Wappalyzer (`wappalyzer`) — https://pipedream.com/apps/wappalyzer.md
- This page (HTML): https://pipedream.com/apps/wappalyzer/actions/get-technologies
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/wappalyzer/actions/get-technologies/get-technologies.mjs

## Description

Returns the details of technologies used on a specific URL. [See the documentation](https://www.wappalyzer.com/docs/api/v2/lookup/)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `urls` | `string[]` | Yes | Between one and ten website URLs. Example: https://example.com,https://example.org. Multiple URLs are not supported with recursive=false. |
| `live` | `boolean` | No | Scan websites in real-time. Defaults to false to return cached results from our database (faster and more complete). If no record is found, live=true is automatically used instead. Use recursive=false to get live results in the same request. |
| `recursive` | `boolean` | No | Index multiple pages (follows internal website links for increased coverage). Defaults to true for best results. If no record is found or live=true is used, using recursive=true causes the request to be completed asynchronously, meaning technologies will not be included in the initial response and the website is being crawled. To get the results when they become available, use callback_url or repeat the request at a later time (free for up to one hour). A crawl can take up to 15 minutes. We recommend using callback_url or repeating the request up to three times every five minutes. When using both live=true and recursive=true, callback_url is required and requests cost two credits instead of one. |
| `callbackUrl` | `string` | No | When an asynchronous request completes, a POST request is made to the callback URL with the results. A callback URL is an public endpoint hosted on your own server. Example: https://yourdomain.com/wappalyzer. Required when using both live=true and recursive=true. |
| `denoise` | `boolean` | No | Exclude low confidence results. Defaults to true. Setting this to false yields more results but is more likely to include false positives. |
| `minAge` | `integer` | No | Return results that have been verified at least once before min_age months ago. Defaults to 0 for most recent results. Use a higher value in combination with squash=false and max_age for historic results grouped by month (up to 12 months per request). |
| `maxAge` | `integer` | No | Return results that have been verified at least once in the last max_age months. Defaults to 2 for best results. To get the most up-to-date but fewer results, use max_age=1. For real-time results, use live=true instead. Use a higher value to get more but less recently verified results. These results are more likely to include websites that no longer use the technology. Use a higher value in combination with squash=false and optionally min_age for historic results grouped by month (up to 12 months per request). |
| `squash` | `boolean` | No | Merge monthly results into a single set. Defaults to true. Set to false to group results by month. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "wappalyzer",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "wappalyzer-get-technologies",
  arguments: {
    urls: ["URLs"],
    live: true,
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "wappalyzer-get-technologies",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    wappalyzer: { authProvisionId: "apn_xxxxxxx" },
    urls: ["URLs"],
    live: true,
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "wappalyzer-get-technologies",
    "configured_props": {
      "wappalyzer": { "authProvisionId": "apn_xxxxxxx" },
      "urls": ["URLs"],
      "live": true
    }
  }'
```

---

- App: https://pipedream.com/apps/wappalyzer.md · All apps: https://pipedream.com/apps
