{
  "openapi": "3.0.1",
  "info": {
    "title": "Visitor IP Enrichment Tool — Leadfeeder Alternative",
    "description": "Enrich authorized website-visitor IP exports with public network evidence. Get registry or ASN organization candidates, reverse DNS, visit context, and source URLs per IP. Results identify networks, not people or verified employers.",
    "version": "0.1",
    "x-build-id": "cn9EjgS1J8sf6Blv6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~leadfeeder-alternative/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-leadfeeder-alternative",
        "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~leadfeeder-alternative/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-leadfeeder-alternative",
        "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~leadfeeder-alternative/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-leadfeeder-alternative",
        "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": [
          "visits"
        ],
        "properties": {
          "visits": {
            "title": "Authorized visitor events",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "Provide 1–500 authorized visitor events from server or CDN logs, for example an IP address with a relative page path. Each event must include a public IPv4 or IPv6 address such as \"8.8.8.8\"; private, local, and reserved addresses are rejected. Use only data you are authorized to process, not browser-side identities or credentialed logs. Events are aggregated into one network-enrichment record per IP address.",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "ipAddress": {
                  "title": "Public visitor IP address",
                  "type": "string",
                  "description": "Public IPv4 or IPv6 address captured in an authorized server, CDN, or consented analytics export, for example \"8.8.8.8\". Local, private, multicast, unspecified, and documentation ranges are rejected before any lookup. This is an address lookup input, not a company domain, URL, person identifier, or browser fingerprint. The output identifies network evidence only and does not identify an individual visitor.",
                  "maxLength": 64
                },
                "pagePath": {
                  "title": "Visited page path",
                  "type": "string",
                  "description": "Optional relative path associated with the visit, for example \"/pricing\" or \"/contact\". Query strings and fragments are removed so marketing parameters and possible personal data do not become part of the result. Use a path on your own site, not a full URL, referrer URL, or external destination. Repeated paths are grouped with the same visitor IP.",
                  "maxLength": 1200
                },
                "externalId": {
                  "title": "Opaque export row ID",
                  "type": "string",
                  "description": "Optional opaque identifier from your authorized export, for example \"log-row-42\", returned only to help match output with your workflow. Keep it non-personal and short because it can be retained in the dataset with the network record. This is not an email, user ID, cookie value, or API key. Multiple IDs for one IP are returned as a deduplicated list.",
                  "maxLength": 120
                },
                "observedAt": {
                  "title": "Visit observation time",
                  "type": "string",
                  "description": "Optional ISO-8601 time from the authorized export, for example \"2026-09-07T12:00:00Z\". The Actor returns the earliest and latest valid observation time for each IP. Omit it when the source does not provide a reliable timestamp. This is visit context, not a collection timestamp for the enrichment lookup.",
                  "maxLength": 40
                },
                "durationSeconds": {
                  "title": "Visit duration in seconds",
                  "type": "integer",
                  "description": "Optional integer dwell time from 0 to 86400 seconds, for example 48. The Actor sums supplied duration values for a grouped IP and does not infer time when it is absent. Use observed analytics duration only, not an estimated lead score. This field adds engagement context but cannot identify a person or company by itself.",
                  "minimum": 0,
                  "maximum": 86400
                }
              },
              "required": [
                "ipAddress"
              ]
            }
          },
          "maxVisitors": {
            "title": "Maximum unique visitor IPs",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum number of unique public IP addresses to enrich after grouping, from 1 to 100. The default is 20 and provides a bounded first run; duplicate events for an accepted IP stay in the same result. Use a smaller value to canary a new export or constrain event charges. This is a unique-IP cap, not a raw visit-event cap.",
            "default": 20
          },
          "requestTimeoutSecs": {
            "title": "Public-source timeout",
            "minimum": 5,
            "maximum": 30,
            "type": "integer",
            "description": "Per-source lookup timeout from 5 to 30 seconds, with a default of 12 seconds. Use the default for normal registry and DNS lookups; lower values prioritize quick diagnostics and higher values tolerate a slow public registry. This controls one source request, not the total run duration. The Actor preserves source diagnostics rather than retrying indefinitely.",
            "default": 12
          },
          "includeReverseDns": {
            "title": "Include reverse DNS evidence",
            "type": "boolean",
            "description": "When enabled, the Actor asks public DNS for hostnames associated with each IP address and returns any response as supporting network evidence. It defaults to true and is useful when a registry record alone does not expose a readable network label. Disable it only when DNS lookup is outside your data-processing policy. Reverse DNS is context, not proof of the visiting employer.",
            "default": true
          },
          "preferIpinfoLite": {
            "title": "Use owner-configured IPinfo Lite when available",
            "type": "boolean",
            "description": "When enabled, the Actor uses the owner-configured free IPinfo Lite source if an encrypted IPINFO_LITE_TOKEN environment secret is available, then retains public registry evidence. It defaults to true but never asks you to supply a token in the input, and the Actor works through public RDAP when the optional source is not configured. Disable it to use public registry and DNS sources only. IPinfo Lite adds ASN context, not proprietary visitor-company identity.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}