curl --request POST \
--url https://api.iotools.cloud/v1/tool/dns-zone-file-parser \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"zoneFile": "$ORIGIN example.com.\n$TTL 1h\n\n@ IN SOA ns1.example.com. hostmaster.example.com. (\n 2026072601 ; serial\n 7200 ; refresh\n 900 ; retry\n 1209600 ; expire\n 3600 ) ; minimum\n\n@ IN NS ns1.example.com.\n IN NS ns2.example.com.\n@ IN A 192.0.2.10\n@ 300 IN AAAA 2001:db8::10\nwww IN CNAME @\nmail IN A 192.0.2.20\n@ IN MX 10 mail\n@ IN TXT \"v=spf1 ip4:192.0.2.20 -all\"\n_sip._tcp IN SRV 10 5 5060 sipserver.example.com.\n@ IN CAA 0 issue \"letsencrypt.org\""
}
'{
"tool": "dns-zone-file-parser",
"tool_version": "1.0.1",
"outputs": {
"summary": [
{
"field": "Origin",
"value": "example.com."
},
{
"field": "Records",
"value": "11"
},
{
"field": "Distinct names",
"value": "4"
},
{
"field": "Record types",
"value": "9"
},
{
"field": "Shortest TTL",
"value": "300"
},
{
"field": "Longest TTL",
"value": "3600"
},
{
"field": "Unparsed lines",
"value": "0"
},
{
"field": "Issues",
"value": "0 errors, 1 warning"
}
],
"records": [
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "SOA",
"value": "ns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "NS",
"value": "ns1.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "NS",
"value": "ns2.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "A",
"value": "192.0.2.10"
},
{
"name": "example.com.",
"ttl": "300",
"class": "IN",
"type": "AAAA",
"value": "2001:db8::10"
},
{
"name": "www.example.com.",
"ttl": "3600",
"class": "IN",
"type": "CNAME",
"value": "@"
},
{
"name": "mail.example.com.",
"ttl": "3600",
"class": "IN",
"type": "A",
"value": "192.0.2.20"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "MX",
"value": "10 mail"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "TXT",
"value": "\"v=spf1 ip4:192.0.2.20 -all\""
},
{
"name": "_sip._tcp.example.com.",
"ttl": "3600",
"class": "IN",
"type": "SRV",
"value": "10 5 5060 sipserver.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "CAA",
"value": "0 issue \"letsencrypt.org\""
}
],
"typeCounts": [
{
"type": "A",
"count": "2"
},
{
"type": "NS",
"count": "2"
},
{
"type": "AAAA",
"count": "1"
},
{
"type": "CAA",
"count": "1"
},
{
"type": "CNAME",
"count": "1"
},
{
"type": "MX",
"count": "1"
},
{
"type": "SOA",
"count": "1"
},
{
"type": "SRV",
"count": "1"
},
{
"type": "TXT",
"count": "1"
}
],
"issues": [
{
"severity": "Warning",
"line": "17",
"detail": "MX target \"mail\" has no trailing dot, so it resolves to mail.example.com. — add the dot if you meant an external name."
}
],
"normalized": "$ORIGIN example.com.\nexample.com.\t3600\tIN\tSOA\tns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600\nexample.com.\t3600\tIN\tNS\tns1.example.com.\nexample.com.\t3600\tIN\tNS\tns2.example.com.\nexample.com.\t3600\tIN\tA\t192.0.2.10\nexample.com.\t300\tIN\tAAAA\t2001:db8::10\nwww.example.com.\t3600\tIN\tCNAME\t@\nmail.example.com.\t3600\tIN\tA\t192.0.2.20\nexample.com.\t3600\tIN\tMX\t10 mail\nexample.com.\t3600\tIN\tTXT\t\"v=spf1 ip4:192.0.2.20 -all\"\n_sip._tcp.example.com.\t3600\tIN\tSRV\t10 5 5060 sipserver.example.com.\nexample.com.\t3600\tIN\tCAA\t0 issue \"letsencrypt.org\"\n",
"json": "{\n \"origin\": \"example.com.\",\n \"directives\": [\n {\n \"name\": \"$ORIGIN\",\n \"value\": \"example.com.\"\n },\n {\n \"name\": \"$TTL\",\n \"value\": \"3600\"\n }\n ],\n \"records\": [\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"SOA\",\n \"rdata\": \"ns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600\",\n \"target\": null,\n \"line\": 4\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"NS\",\n \"rdata\": \"ns1.example.com.\",\n \"target\": \"ns1.example.com.\",\n \"line\": 11\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"NS\",\n \"rdata\": \"ns2.example.com.\",\n \"target\": \"ns2.example.com.\",\n \"line\": 12\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"A\",\n \"rdata\": \"192.0.2.10\",\n \"target\": null,\n \"line\": 13\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 300,\n \"ttlSource\": \"record\",\n \"class\": \"IN\",\n \"type\": \"AAAA\",\n \"rdata\": \"2001:db8::10\",\n \"target\": null,\n \"line\": 14\n },\n {\n \"name\": \"www.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"CNAME\",\n \"rdata\": \"@\",\n \"target\": \"example.com.\",\n \"line\": 15\n },\n {\n \"name\": \"mail.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"A\",\n \"rdata\": \"192.0.2.20\",\n \"target\": null,\n \"line\": 16\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"MX\",\n \"rdata\": \"10 mail\",\n \"target\": \"mail.example.com.\",\n \"line\": 17\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"TXT\",\n \"rdata\": \"\\\"v=spf1 ip4:192.0.2.20 -all\\\"\",\n \"target\": null,\n \"line\": 18\n },\n {\n \"name\": \"_sip._tcp.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"SRV\",\n \"rdata\": \"10 5 5060 sipserver.example.com.\",\n \"target\": \"sipserver.example.com.\",\n \"line\": 19\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"CAA\",\n \"rdata\": \"0 issue \\\"letsencrypt.org\\\"\",\n \"target\": null,\n \"line\": 20\n }\n ],\n \"issues\": [\n {\n \"severity\": \"Warning\",\n \"line\": \"17\",\n \"message\": \"MX target \\\"mail\\\" has no trailing dot, so it resolves to mail.example.com. — add the dot if you meant an external name.\"\n }\n ]\n}"
},
"credits_used": 3,
"credits_remaining": null
}DNS Zone File Parser
Paste a BIND zone file and read it as a table: every record with its owner name fully qualified, its inherited TTL resolved, and its type and rdata split out. Honours ORIGIN,TTL and multi-line SOA blocks, flags the classic mistakes (missing SOA, a CNAME sharing a name, a target missing its trailing dot), and exports to CSV or JSON. Runs entirely in your browser — no DNS lookups.
curl --request POST \
--url https://api.iotools.cloud/v1/tool/dns-zone-file-parser \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"zoneFile": "$ORIGIN example.com.\n$TTL 1h\n\n@ IN SOA ns1.example.com. hostmaster.example.com. (\n 2026072601 ; serial\n 7200 ; refresh\n 900 ; retry\n 1209600 ; expire\n 3600 ) ; minimum\n\n@ IN NS ns1.example.com.\n IN NS ns2.example.com.\n@ IN A 192.0.2.10\n@ 300 IN AAAA 2001:db8::10\nwww IN CNAME @\nmail IN A 192.0.2.20\n@ IN MX 10 mail\n@ IN TXT \"v=spf1 ip4:192.0.2.20 -all\"\n_sip._tcp IN SRV 10 5 5060 sipserver.example.com.\n@ IN CAA 0 issue \"letsencrypt.org\""
}
'{
"tool": "dns-zone-file-parser",
"tool_version": "1.0.1",
"outputs": {
"summary": [
{
"field": "Origin",
"value": "example.com."
},
{
"field": "Records",
"value": "11"
},
{
"field": "Distinct names",
"value": "4"
},
{
"field": "Record types",
"value": "9"
},
{
"field": "Shortest TTL",
"value": "300"
},
{
"field": "Longest TTL",
"value": "3600"
},
{
"field": "Unparsed lines",
"value": "0"
},
{
"field": "Issues",
"value": "0 errors, 1 warning"
}
],
"records": [
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "SOA",
"value": "ns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "NS",
"value": "ns1.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "NS",
"value": "ns2.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "A",
"value": "192.0.2.10"
},
{
"name": "example.com.",
"ttl": "300",
"class": "IN",
"type": "AAAA",
"value": "2001:db8::10"
},
{
"name": "www.example.com.",
"ttl": "3600",
"class": "IN",
"type": "CNAME",
"value": "@"
},
{
"name": "mail.example.com.",
"ttl": "3600",
"class": "IN",
"type": "A",
"value": "192.0.2.20"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "MX",
"value": "10 mail"
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "TXT",
"value": "\"v=spf1 ip4:192.0.2.20 -all\""
},
{
"name": "_sip._tcp.example.com.",
"ttl": "3600",
"class": "IN",
"type": "SRV",
"value": "10 5 5060 sipserver.example.com."
},
{
"name": "example.com.",
"ttl": "3600",
"class": "IN",
"type": "CAA",
"value": "0 issue \"letsencrypt.org\""
}
],
"typeCounts": [
{
"type": "A",
"count": "2"
},
{
"type": "NS",
"count": "2"
},
{
"type": "AAAA",
"count": "1"
},
{
"type": "CAA",
"count": "1"
},
{
"type": "CNAME",
"count": "1"
},
{
"type": "MX",
"count": "1"
},
{
"type": "SOA",
"count": "1"
},
{
"type": "SRV",
"count": "1"
},
{
"type": "TXT",
"count": "1"
}
],
"issues": [
{
"severity": "Warning",
"line": "17",
"detail": "MX target \"mail\" has no trailing dot, so it resolves to mail.example.com. — add the dot if you meant an external name."
}
],
"normalized": "$ORIGIN example.com.\nexample.com.\t3600\tIN\tSOA\tns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600\nexample.com.\t3600\tIN\tNS\tns1.example.com.\nexample.com.\t3600\tIN\tNS\tns2.example.com.\nexample.com.\t3600\tIN\tA\t192.0.2.10\nexample.com.\t300\tIN\tAAAA\t2001:db8::10\nwww.example.com.\t3600\tIN\tCNAME\t@\nmail.example.com.\t3600\tIN\tA\t192.0.2.20\nexample.com.\t3600\tIN\tMX\t10 mail\nexample.com.\t3600\tIN\tTXT\t\"v=spf1 ip4:192.0.2.20 -all\"\n_sip._tcp.example.com.\t3600\tIN\tSRV\t10 5 5060 sipserver.example.com.\nexample.com.\t3600\tIN\tCAA\t0 issue \"letsencrypt.org\"\n",
"json": "{\n \"origin\": \"example.com.\",\n \"directives\": [\n {\n \"name\": \"$ORIGIN\",\n \"value\": \"example.com.\"\n },\n {\n \"name\": \"$TTL\",\n \"value\": \"3600\"\n }\n ],\n \"records\": [\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"SOA\",\n \"rdata\": \"ns1.example.com. hostmaster.example.com. 2026072601 7200 900 1209600 3600\",\n \"target\": null,\n \"line\": 4\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"NS\",\n \"rdata\": \"ns1.example.com.\",\n \"target\": \"ns1.example.com.\",\n \"line\": 11\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"NS\",\n \"rdata\": \"ns2.example.com.\",\n \"target\": \"ns2.example.com.\",\n \"line\": 12\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"A\",\n \"rdata\": \"192.0.2.10\",\n \"target\": null,\n \"line\": 13\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 300,\n \"ttlSource\": \"record\",\n \"class\": \"IN\",\n \"type\": \"AAAA\",\n \"rdata\": \"2001:db8::10\",\n \"target\": null,\n \"line\": 14\n },\n {\n \"name\": \"www.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"CNAME\",\n \"rdata\": \"@\",\n \"target\": \"example.com.\",\n \"line\": 15\n },\n {\n \"name\": \"mail.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"A\",\n \"rdata\": \"192.0.2.20\",\n \"target\": null,\n \"line\": 16\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"MX\",\n \"rdata\": \"10 mail\",\n \"target\": \"mail.example.com.\",\n \"line\": 17\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"TXT\",\n \"rdata\": \"\\\"v=spf1 ip4:192.0.2.20 -all\\\"\",\n \"target\": null,\n \"line\": 18\n },\n {\n \"name\": \"_sip._tcp.example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"SRV\",\n \"rdata\": \"10 5 5060 sipserver.example.com.\",\n \"target\": \"sipserver.example.com.\",\n \"line\": 19\n },\n {\n \"name\": \"example.com.\",\n \"ttl\": 3600,\n \"ttlSource\": \"directive\",\n \"class\": \"IN\",\n \"type\": \"CAA\",\n \"rdata\": \"0 issue \\\"letsencrypt.org\\\"\",\n \"target\": null,\n \"line\": 20\n }\n ],\n \"issues\": [\n {\n \"severity\": \"Warning\",\n \"line\": \"17\",\n \"message\": \"MX target \\\"mail\\\" has no trailing dot, so it resolves to mail.example.com. — add the dot if you meant an external name.\"\n }\n ]\n}"
},
"credits_used": 3,
"credits_remaining": null
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Response
Tool output
Show child attributes
Show child attributes
The tool's slug, echoing the {slug} in the request path.
Output-contract version for this tool.
Credits this call consumed, after any settlement refund. 0 when metering is disabled.
Credits left in the current monthly allowance, or null when metering is disabled.
Correlation id, also sent as x-request-id.
Was this page helpful?