{
  "title": "Referential integrity checker",
  "human_url": "https://happytails.ai/en/data-tools/referential-integrity-checker/",
  "agent_url": "https://happytails.ai/agents/en/data-tools/referential-integrity-checker/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/data-tools/referential-integrity-checker.md",
  "content": "Referential integrity checker\nFind child records whose foreign keys have no matching parent in another CSV.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use Referential integrity checker\nPaste the child CSV in the main input and the parent CSV in the comparison field.\nDefine matching ordered child and parent key columns.\nReview missing or incomplete child keys and download the report.\nUseful next steps\nDataset constraint checker\nCSV reconciliation report\nPrepare the source\nPaste the child CSV in the main input and the parent CSV in the comparison field.\nChoose the matching rules\nDefine matching ordered child and parent key columns.\nReview and keep the result\nReview missing or incomplete child keys and download the report. Parent keys must be nonempty and unique. Composite keys compare exact ordered strings without trimming or numeric coercion. An option allows entirely empty child keys; partly empty keys remain violations.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Dataset constraint checker",
      "url": "https://happytails.ai/en/data-tools/dataset-constraint-checker/"
    },
    {
      "name": "CSV reconciliation report",
      "url": "https://happytails.ai/en/data-tools/csv-reconciliation-report/"
    }
  ],
  "tool": {
    "id": "referential-integrity-checker",
    "category": "data-tools",
    "built": true,
    "requirements": "Parent keys must be nonempty and unique. Composite keys compare exact ordered strings without trimming or numeric coercion. An option allows entirely empty child keys; partly empty keys remain violations. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters.",
    "implementation": {
      "fields": [
        {
          "key": "separator",
          "label": "Input CSV separator",
          "value": ",",
          "type": "select",
          "values": [
            ",",
            ";",
            "\t"
          ]
        },
        {
          "key": "childKeys",
          "label": "Child key columns (JSON)",
          "value": "[\"customer_id\"]",
          "type": "textarea",
          "help": "Ordered child foreign-key columns."
        },
        {
          "key": "parentKeys",
          "label": "Parent key columns (JSON)",
          "value": "[\"id\"]",
          "type": "textarea",
          "help": "Equally many parent primary-key columns, in matching order."
        },
        {
          "key": "comparison",
          "label": "Parent CSV",
          "value": "id\nA\nB\n",
          "type": "textarea",
          "help": "Paste the parent table, including its header."
        },
        {
          "key": "emptyKeys",
          "label": "Empty child keys",
          "value": "Report missing",
          "type": "select",
          "values": [
            "Report missing",
            "Allow entirely empty"
          ]
        }
      ],
      "live": true,
      "presentation": "metrics",
      "note": "Runs locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Paste the child table in the main input. Parent keys must be nonempty and unique. Exact string matching supports composite keys. Partially empty child keys are always violations; entirely empty keys can be permitted explicitly.",
      "experience": {
        "automatic": true,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Child CSV",
        "placeholder": "customer_id\nA\nC",
        "help": "Paste CSV data with unique column headers. Quoted multiline cells are supported. Results update as you type. Up to 1,000,000 characters.",
        "action": null
      },
      "mode": "automatic",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Referential integrity checker\n\n- Human page: https://happytails.ai/en/data-tools/referential-integrity-checker/\n- Markdown: https://happytails.ai/en/data-tools/referential-integrity-checker.md\n- Structured JSON: https://happytails.ai/agents/en/data-tools/referential-integrity-checker/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `referential-integrity-checker` |\n| Category | data-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Automatic updates after valid input or file selection. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Paste the child table in the main input. Parent keys must be nonempty and unique. Exact string matching supports composite keys. Partially empty child keys are always violations; entirely empty keys can be permitted explicitly.\n\n### Inputs and settings\n\nText input: Child CSV.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\ncustomer_id\nA\nC\n```\n\nPaste CSV data with unique column headers. Quoted multiline cells are supported. Results update as you type. Up to 1,000,000 characters.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `separator` | Input CSV separator | select | \",\" | Allowed: ,, ;, \t |\n| `childKeys` | Child key columns (JSON) | textarea | \"[\\\"customer_id\\\"]\" |  |\n| `parentKeys` | Parent key columns (JSON) | textarea | \"[\\\"id\\\"]\" |  |\n| `comparison` | Parent CSV | textarea | \"id\\nA\\nB\\n\" |  |\n| `emptyKeys` | Empty child keys | select | \"Report missing\" | Allowed: Report missing, Allow entirely empty |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nParent keys must be nonempty and unique. Composite keys compare exact ordered strings without trimming or numeric coercion. An option allows entirely empty child keys; partly empty keys remain violations. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"referential-integrity-checker\",\n  \"category\": \"data-tools\",\n  \"built\": true,\n  \"requirements\": \"Parent keys must be nonempty and unique. Composite keys compare exact ordered strings without trimming or numeric coercion. An option allows entirely empty child keys; partly empty keys remain violations. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"separator\",\n        \"label\": \"Input CSV separator\",\n        \"value\": \",\",\n        \"type\": \"select\",\n        \"values\": [\n          \",\",\n          \";\",\n          \"\\t\"\n        ]\n      },\n      {\n        \"key\": \"childKeys\",\n        \"label\": \"Child key columns (JSON)\",\n        \"value\": \"[\\\"customer_id\\\"]\",\n        \"type\": \"textarea\",\n        \"help\": \"Ordered child foreign-key columns.\"\n      },\n      {\n        \"key\": \"parentKeys\",\n        \"label\": \"Parent key columns (JSON)\",\n        \"value\": \"[\\\"id\\\"]\",\n        \"type\": \"textarea\",\n        \"help\": \"Equally many parent primary-key columns, in matching order.\"\n      },\n      {\n        \"key\": \"comparison\",\n        \"label\": \"Parent CSV\",\n        \"value\": \"id\\nA\\nB\\n\",\n        \"type\": \"textarea\",\n        \"help\": \"Paste the parent table, including its header.\"\n      },\n      {\n        \"key\": \"emptyKeys\",\n        \"label\": \"Empty child keys\",\n        \"value\": \"Report missing\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Report missing\",\n          \"Allow entirely empty\"\n        ]\n      }\n    ],\n    \"live\": true,\n    \"presentation\": \"metrics\",\n    \"note\": \"Runs locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Paste the child table in the main input. Parent keys must be nonempty and unique. Exact string matching supports composite keys. Partially empty child keys are always violations; entirely empty keys can be permitted explicitly.\",\n    \"experience\": {\n      \"automatic\": true,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Child CSV\",\n      \"placeholder\": \"customer_id\\nA\\nC\",\n      \"help\": \"Paste CSV data with unique column headers. Quoted multiline cells are supported. Results update as you type. Up to 1,000,000 characters.\",\n      \"action\": null\n    },\n    \"mode\": \"automatic\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nFind child records whose foreign keys have no matching parent in another CSV.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use Referential integrity checker\n\n1. Paste the child CSV in the main input and the parent CSV in the comparison field.\n2. Define matching ordered child and parent key columns.\n3. Review missing or incomplete child keys and download the report.\n\n## Useful next steps\n\n- [Dataset constraint checker](https://happytails.ai/en/data-tools/dataset-constraint-checker/) ([Markdown](https://happytails.ai/en/data-tools/dataset-constraint-checker.md))\n\n- [CSV reconciliation report](https://happytails.ai/en/data-tools/csv-reconciliation-report/) ([Markdown](https://happytails.ai/en/data-tools/csv-reconciliation-report.md))\n\n## Prepare the source\n\nPaste the child CSV in the main input and the parent CSV in the comparison field.\n\n### Choose the matching rules\n\nDefine matching ordered child and parent key columns.\n\n### Review and keep the result\n\nReview missing or incomplete child keys and download the report. Parent keys must be nonempty and unique. Composite keys compare exact ordered strings without trimming or numeric coercion. An option allows entirely empty child keys; partly empty keys remain violations.\n"
}