RFC 8805 · RFC 9092

Publish an RFC 8805 geofeed at a URL that stays put. Then find out who reads it.

Import the prefixes your ASN announces, set where they are, and paste one line into your registry object. Every fetch is attributed, so you can tell whether MaxMind, Google or anyone else actually picked the file up.

# network,country,region,city,postal_code
192.0.2.0/24,ES,ES-M,Madrid,28001
198.51.100.0/24,US,US-NY,New York,10001
203.0.113.0/24,DE,,,
2001:db8::/32,ES,ES-B,Barcelona,08001
2001:db8:1::/48,JP,JP-13,Tokyo,100-0001
Runs now. No account, no API key.Open the raw file

All three are real. The feed is rendered by the same code that serves every live feed and the request returns that 304 today; the prefixes are reserved documentation space (RFC 5737, RFC 3849), so nothing here claims a location for anybody's addresses.

Four steps, and the fourth one is the only one we do not control.

Adding an ASN, importing its prefixes and setting locations takes a few minutes. Then you put one line in your registry object and the discovery chain works on its own.

1.0 Quickstart

01

Add your ASN

Type the number. Nothing is looked up against your identity — the ownership check happens against the prefixes, in step two.

02

Import what you announce

Prefixes come from RIPEstat's announced-prefixes view for your ASN, IPv4 and IPv6 together. The largest feed here holds 219 of them; none were typed by hand.

03

Say where they are

Country is the only required column. Region takes an ISO 3166-2 code, and picking a subdivision fills the code in for you rather than truncating the name.

04

Point your registry object at it

One attribute on the inetnum or inet6num covering the prefix. RFC 9092 says consumers look there — not on the aut-num, which is where this gets put by mistake.

inetnum objectRPSL
inetnum:        192.0.2.0 - 192.0.2.255
netname:        EXAMPLE-NET
country:        ES
geofeed:        https://geofeed.network/geofeeds/example.csv

Your feed URL is fixed to your account, not to the ASNs in it, so adding or removing an ASN never invalidates what you pasted.

How long step four takes is up to your RIR, not us: a RIPE object update is live in seconds, some registries queue it. Everything before that is done the moment you save it.

A country code on its own is a valid geofeed.

It is also what most published feeds are. This is every prefix currently served from here, counted by which of the five RFC 8805 columns is filled in. Start with the country column; the rest is refinement.

2.0 Field coverage

290 prefixes across 14 ASNs, all of them live feeds served by this service, measured 2026-09-09. Bar widths are count ÷ 290.
COLUMNnFILLED
network290100%
country28799%
region279%
city228%
postal_code248%

290 prefixes across 14 ASNs, all of them live feeds served by this service, measured 2026-09-09. Bar widths are count ÷ 290.

region, city and postal_code are optional in RFC 8805 and a consumer that cannot use them ignores them. An empty column is never an error; a wrong one is.

The parts that are easy to get wrong.

A geofeed is a five-column CSV file. Nothing about writing one is hard. What costs an operator real accuracy is the handful of details below, each of which has silently broken feeds in the wild — including the ones this service used to generate.

3.0 What it does

3.1ISO 3166-2 region codes, resolved not guessed

RFC 8805 wants a subdivision code in column three. The previous version of this app produced one by cutting the region name to two letters, which turned Madrid into ES-MA — not a subdivision that exists. Regions now come from a lookup, both directions: a code gives you its canonical name, a name gives you its code.

192.0.2.0/24,ES,ES-M,Madrid,28001
3.2IPv6, on the same footing

Parsed, normalised to RFC 5952 form and served in the same file as your IPv4 prefixes. The importer no longer skips anything containing a colon.

2001:db8::/32,ES,ES-B,Barcelona,08001
3.3Whether your registry object actually points at the feed

The panel queries RDAP through IANA's bootstrap registry and reads the inetnum covering each prefix. Three answers that matter, kept apart: it references your feed, it references a different URL, or it references nothing. The middle one usually means a rename nobody propagated.

geofeed:        https://geofeed.network/geofeeds/example.csv
3.4Who has read it, and when

Every fetch is attributed from its User-Agent and shown per consumer. A geofeed nobody polls fails silently by design, and this is the only signal that it is working. A 304 counts as a read: a provider that revalidated has your data.

user-agent: MaxMind GeoIP Update/1.0
3.5Conditional requests that work

A strong ETag over the exact bytes, and a Last-Modified taken from your most recent edit. The old generator sent the current time on every response, which no poller could ever act on.

$ curl -sI -H 'If-None-Match: "rHr9KePUYPER2zMEmMd8p9oYriI"' https://geofeed.network/geofeeds/example.csv
HTTP/2 304
3.6Push from your IPAM instead of typing

A read endpoint and a replace endpoint, bearer-token authenticated, 120 requests per minute. Write access is opt-in per token and revoking one takes effect on the next request.

$ curl -sH 'Authorization: Bearer gfn_...' https://geofeed.network/api/v1/prefixes
3.7Bring the feed you already publish

Paste it and see the diff before anything is written: what would be added, changed, left alone, and — if you asked for a replace — removed. Region names are accepted on the way in and resolved to codes, because that is what existing feeds contain.

preview: 12 add, 3 update, 1 delete, 4 unchanged
3.8A validator that is not behind the login

Paste a feed or give a URL and get the line numbers. It is public because a format checker that requires an account is useless to the person debugging someone else's feed.

line 14: region "Madrid" is not an ISO 3166-2 code

You do not need this service to publish a geofeed.

A static CSV on a web server you already run is a complete, correct, spec-compliant geofeed, and it puts nobody between you and your consumers. That is a real advantage and it is the first row of the table. Here is the rest of it, honestly.

4.0 Compared with hosting the file yourself

Static file you hostHere
No third party in the pathYesNo — this is the trade-off
Every RFC 8805 consumer can read itYesYes
Region column validated against ISO 3166-2Whatever you wroteChecked before it is served
Prefixes kept in step with what you announceManualImported from RIPEstat
Registry reference checked (RFC 9092)NoRDAP, per prefix
Fetches attributed to a providerAccess log, unattributedPer consumer, with the last read
ETag and 304 revalidationDepends on your serverStrong ETag over the served bytes
CostYour hostingFree

And if you change your mind: download the exact bytes being served and put them on your own server. The only thing to change is the URL in your registry object. There is nothing here to migrate out of.

Nothing, and these are the actual limits.

There is no paid tier, no trial and no card. The service exists because Hostealo runs networks and needed it. The limits below are the ones in the code, not a marketing summary of them.

5.0 What it costs

Feed requests
Unlimited. Cache-Control: public, max-age=3600.
ASNs and prefixes per account
No cap. The largest account here publishes 219 prefixes.
API
120 requests per minute per token. Unlimited tokens.
Registry check
6 runs per 10 minutes, 25 prefixes per run — the RIRs throttle.
Paste import
10 imports per 10 minutes, 5 000 lines per import.
Accounts
Open registration. Two-factor available, TOTP.

Questions an operator actually asks

6.0 Questions

A CSV file listing your prefixes and where they are: network, country, region, city, postal code. RFC 8805 defines it. Geolocation providers read it and use it in preference to guessing from routing data, which is how a prefix that moved to Madrid last month keeps resolving to Ashburn.

From your registry object, not from us. RFC 9092 says a consumer reads the geofeed: attribute on the inetnum or inet6num covering the prefix — or a remarks: Geofeed <url> line where the registry has no dedicated attribute. Putting it on the aut-num instead is the most common mistake; some consumers do look there, most do not.

No. Country is the only column that has to be there. 9% of the prefixes published through this service name a region at all, and they are all valid feeds. A country-level feed that is correct beats a street-level one that is stale.

Yes, and it is treated as load-bearing. Your feed id belongs to your account and does not change when you add or remove an ASN. These URLs sit inside third-party WHOIS objects, so a 404 here is not a broken page — it is your location data going quietly stale at Google and MaxMind with nobody seeing an error. Byte-for-byte output is verified on every deploy.

Consumers keep the copy they have — the feed is sent with a one-hour max-age and a strong ETag, so most polls are revalidations. A failure returns 503 rather than 404, because a 404 tells a consumer you have no geofeed, which is the one wrong answer. You can also download the exact bytes at any time and serve them yourself.

Yes. Create an API token in the panel, GET /api/v1/prefixes to read and PUT to replace. Write access is per token and off by default. The response is the same data the panel shows, so a diff against your source of truth is straightforward.

AP Interactive Solutions S.L., trading as Hostealo.es, in Spain. It started as an internal tool for our own ASNs and is now used by operators in eight countries.

Publish one file. Then find out who read it.

Free, no card, and the validator does not need an account either.

$curl -s https://geofeed.network/geofeeds/example.csv