IPinfo Google SecOps Integration
Google Security Operations (SecOps), formerly known as Chronicle, is Google Cloud's SIEM/SOAR platform. The IPinfo integration for SecOps SOAR adds enrichment actions you can drop into your playbooks to enrich ADDRESS and HOSTNAME entities straight from your case data.
The integration is maintained in Google's open source chronicle/content-hub repository and distributed through the SecOps Marketplace. Google also has its own reference page for it at docs.cloud.google.com/chronicle/docs/soar/marketplace-integrations/ipinfo. This guide covers the same integration from the IPinfo side: what each action does, how to configure it against your IPinfo plan, and how to pick the right dataset bundle.
Features
- Enriches
ADDRESSentities with geolocation, ASN, privacy, hosting, mobile, and abuse data. - Enriches
HOSTNAMEentities with hosted-domain data. - Supports IPinfo's Lite, Core, Plus, and Max bundles, in addition to the original Legacy per-IP response shape, through a single configurable action parameter.
- Uses the
/batchendpoint for the Lite/Core/Plus/Max bundles, so a playbook step enriching many entities makes far fewer outbound calls than one request per IP.
Prerequisites
- A Google SecOps SOAR license with permission to install Marketplace integrations.
- An IPinfo account and API token.
- Your IPinfo plan needs to include whichever bundle(s) you plan to select in the Get IP Information action (see Choosing a bundle). A free-tier token only has access to Lite.
Installing the Integration
- In the Google SecOps SOAR console, go to Marketplace.
- Search for IPInfo and open the integration details pane.
- Click Install, then configure an instance (see Configuration below).
Since integration version 7.0, the source is public, so you can also review or fork it directly from GitHub before installing.
Configuration
When you add an IPInfo integration instance, you'll be asked for:
| Parameter | Type | Required | Description |
|---|---|---|---|
| API Root | URL | Yes | Base URL used by the Ping and Get Domain Information actions, and by the Get IP Information action when the bundle is set to Legacy. Use https://ipinfo.io/. |
| Token | Password | Yes | Your IPinfo API token. |
| Verify SSL | Boolean | Yes | Whether to validate the server's SSL certificate. |
API Root only affects Legacy-shaped calls. The Lite/Core/Plus/Max bundles in Get IP Information call fixed IPinfo
/batchURLs (https://api.ipinfo.io/batchandhttps://api.ipinfo.io/batch/lite) no matter what you set for API Root. That field only matters if you keep the action onLegacy.
Every action authenticates with an Authorization: Bearer <Token> header, the same Bearer token auth supported across all IPinfo API hosts.
Actions
Ping
Validates that the configured Token and API Root can reach IPinfo. Run this after installing the integration or rotating your token, so you can confirm it's configured correctly before using it in a live playbook.
Get IP Information
Enriches every ADDRESS entity in scope with IP data. Takes one parameter:
| Parameter | Type | Default | Description |
|---|---|---|---|
| IPinfo Bundle | Dropdown | Legacy | Legacy, Lite, Core, Plus, or Max. See Choosing a bundle. |
Legacy: queries the per-IP endpoint (GET {API Root}/{ip}) once per entity. This is the original behavior of the action, kept as the default so existing playbooks don't change behavior on upgrade.Lite/Core/Plus/Max: queries IPinfo's/batchendpoint instead, chunking entities into groups of up to 1,000 IPs per request. If a chunk fails outright (network error, non-2xx response), only the entities in that chunk are marked failed and the other chunks still succeed. IPs that IPinfo couldn't resolve inside an otherwise-successful chunk get reported individually, without failing the rest of that chunk.
Successfully enriched entities have their properties updated (prefixed IPInfo_) and get attached to the result as a per-entity table. The full raw payload for every enriched entity is also available as the action's JSON result.
Below are real, live responses for the same IP (104.28.214.16, a Cloudflare WARP exit node) across every bundle, so you can see exactly how the shape changes. Each one shows the request the integration makes and the JSON result you'd get back for that entity.
{
"EntityResult": {
"ip": "104.28.214.16",
"asn": {
"asn": "AS13335",
"name": "Cloudflare, Inc.",
"domain": "cloudflare.com"
},
"as_name": "Cloudflare, Inc.",
"as_domain": "cloudflare.com",
"country_code": "GB",
"country": "United Kingdom",
"continent_code": "EU",
"continent": "Europe"
},
"Entity": "104.28.214.16"
}
Get Domain Information
Enriches every HOSTNAME entity in scope by querying IPinfo's Hosted Domains API for the entity's domain. This is an Enterprise/Custom API feature, so it will fail with a plan/permission error on tokens that don't have Hosted Domains access.
Sample JSON result:
{
"EntityResult": {
"domain": "domain-example.net",
"ip": "1.1.1.1",
"range": "1.1.1.1/12",
"total": 939,
"domains": ["domain-example.net", "domain-example.com", "..."],
"asn": "AS7922"
},
"Entity": "domain-example.net"
}
Choosing a bundle
The IPinfo Bundle parameter on Get IP Information picks which of IPinfo's dataset tiers to query. Each bundle is gated by your token's plan, so selecting one your token doesn't have access to will fail the enrichment for every entity in that batch.
| Bundle | Data included | Notes |
|---|---|---|
| Lite | Country, continent, ASN | Free tier, unlimited requests. |
| Core | + city, region, coordinates, timezone, postal code, hosting/mobile/anonymity flags | Paid. |
| Plus | + geoname ID, accuracy radius, VPN/proxy/Tor/relay detection | Paid. |
| Max | + residential proxy detection, behavioral activity signals | Paid. |
| Legacy | Original per-IP response shape this action has always returned | Default. Unaffected by your bundle entitlements, as long as your token can call {API Root}/{ip}. |
See the full IPinfo API schema for the exact field-by-field availability across bundles.
Using the actions in a playbook
Both enrichment actions read from siemplify.target_entities, so you just add them to a playbook step scoped to the entity type you want to enrich (ADDRESS for Get IP Information, HOSTNAME for Get Domain Information). No additional wiring is needed to select which entities get enriched.
Troubleshooting
| Symptom | Likely cause |
|---|---|
401/invalid token errors on any action | The configured Token is invalid, expired, or was revoked. Re-copy it from your IPinfo dashboard and re-run Ping. |
Enrichment fails only when IPinfo Bundle is Core, Plus, or Max | Your token's plan doesn't include that bundle. Either upgrade your plan or switch the action to Lite, which is available on every token. |
API limit exceeded error | You've hit your plan's request quota (429 response). Check usage on your IPinfo dashboard. |
Get Domain Information fails for all entities | Hosted Domains is an Enterprise/Custom API feature. Confirm your token's plan includes it. |
Some entities enriched, others report per-entity errors, when using a bundle other than Legacy | This is expected for partially-resolvable batches. IPinfo just couldn't resolve those specific IPs, so check the per-entity error message in the action's output. |
Where to get help
Release history for the integration (bundle support, Python version upgrades, and so on) is tracked in the content-hub repo and on Google's integration page.