Iteration Layer

Extract NDA Terms and Generate a Compliance Checklist

Extract key terms from a non-disclosure agreement, then generate a compliance checklist spreadsheet tracking obligations and deadlines.

No credit card required — start with free trial credits

Who this is for

Legal agencies managing NDAs across multiple clients use this pipeline to extract key confidentiality terms and generate standardized compliance checklists — tracking obligation scope, duration, permitted disclosures, and return-of-materials deadlines.

Request
# Step 1: Extract NDA terms
EXTRACTION=$(curl -s -X POST https://api.iterationlayer.com/document-extraction/v1/extract \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "type": "url",
        "name": "nda-vanguard-tech.pdf",
        "url": "https://example.com/legal/nda-vanguard-tech-2026.pdf"
      }
    ],
    "schema": {
      "fields": [
        {
          "name": "disclosing_party",
          "type": "TEXT",
          "description": "Name of the disclosing party"
        },
        {
          "name": "receiving_party",
          "type": "TEXT",
          "description": "Name of the receiving party"
        },
        {
          "name": "effective_date",
          "type": "DATE",
          "description": "NDA effective date"
        },
        {
          "name": "confidentiality_duration",
          "type": "TEXT",
          "description": "Duration of confidentiality obligations"
        },
        {
          "name": "scope_of_confidential_info",
          "type": "TEXTAREA",
          "description": "Definition and scope of confidential information"
        },
        {
          "name": "permitted_disclosures",
          "type": "TEXTAREA",
          "description": "Exceptions or permitted disclosures"
        },
        {
          "name": "return_of_materials",
          "type": "TEXTAREA",
          "description": "Obligations to return or destroy materials"
        },
        {
          "name": "non_solicitation",
          "type": "BOOLEAN",
          "description": "Whether the NDA includes a non-solicitation clause"
        },
        {
          "name": "governing_law",
          "type": "TEXT",
          "description": "Governing law and jurisdiction"
        },
        {
          "name": "breach_remedies",
          "type": "TEXTAREA",
          "description": "Remedies available in case of breach"
        }
      ]
    }
  }')

# Step 2: Generate a compliance checklist spreadsheet
curl -X POST https://api.iterationlayer.com/sheet-generation/v1/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "format": "xlsx",
    "sheets": [
      {
        "name": "NDA Compliance Checklist",
        "columns": [
          {
            "name": "Obligation",
            "width": 35
          },
          {
            "name": "Details",
            "width": 50
          },
          {
            "name": "Status",
            "width": 15
          },
          {
            "name": "Due Date",
            "width": 15
          },
          {
            "name": "Notes",
            "width": 30
          }
        ],
        "rows": [
          [
            {
              "value": "Confidentiality scope acknowledged"
            },
            {
              "value": "All technical specifications, business plans, and customer data shared by Vanguard Technologies are covered."
            },
            {
              "value": "Pending"
            },
            {
              "value": "2026-04-15",
              "format": "date"
            },
            {
              "value": "Brief internal team on scope"
            }
          ],
          [
            {
              "value": "Permitted disclosure carve-outs documented"
            },
            {
              "value": "Court orders, regulatory requirements, and pre-existing public knowledge are excluded."
            },
            {
              "value": "Pending"
            },
            {
              "value": "2026-04-15",
              "format": "date"
            },
            {
              "value": ""
            }
          ],
          [
            {
              "value": "Confidentiality end date tracked"
            },
            {
              "value": "Obligations remain in effect for 3 years from the effective date."
            },
            {
              "value": "Pending"
            },
            {
              "value": "2029-04-01",
              "format": "date"
            },
            {
              "value": "Calendar reminder set"
            }
          ],
          [
            {
              "value": "Return of materials process defined"
            },
            {
              "value": "All materials must be returned or certified destroyed within 30 days of termination."
            },
            {
              "value": "Pending"
            },
            {
              "value": ""
            },
            {
              "value": "Applies at termination"
            }
          ],
          [
            {
              "value": "Non-solicitation compliance"
            },
            {
              "value": "No solicitation of disclosing party employees for 12 months."
            },
            {
              "value": "Active"
            },
            {
              "value": "2027-04-01",
              "format": "date"
            },
            {
              "value": ""
            }
          ]
        ]
      }
    ]
  }'
Response
{
  "success": true,
  "data": {
    "buffer": "UEsDBBQAAAA...",
    "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  }
}
Request
import { IterationLayer } from "iterationlayer";
const client = new IterationLayer({ apiKey: "YOUR_API_KEY" });

// Step 1: Extract NDA terms
const extraction = await client.extract({
  files: [{ type: "url", name: "nda-vanguard-tech.pdf", url: "https://example.com/legal/nda-vanguard-tech-2026.pdf" }],
  schema: {
    fields: [
      { name: "disclosing_party", type: "TEXT", description: "Name of the disclosing party" },
      { name: "receiving_party", type: "TEXT", description: "Name of the receiving party" },
      { name: "effective_date", type: "DATE", description: "NDA effective date" },
      { name: "confidentiality_duration", type: "TEXT", description: "Duration of confidentiality obligations" },
      { name: "scope_of_confidential_info", type: "TEXTAREA", description: "Definition and scope of confidential information" },
      { name: "permitted_disclosures", type: "TEXTAREA", description: "Exceptions or permitted disclosures" },
      { name: "return_of_materials", type: "TEXTAREA", description: "Obligations to return or destroy materials" },
      { name: "non_solicitation", type: "BOOLEAN", description: "Whether the NDA includes a non-solicitation clause" },
      { name: "governing_law", type: "TEXT", description: "Governing law and jurisdiction" },
      { name: "breach_remedies", type: "TEXTAREA", description: "Remedies available in case of breach" },
    ],
  },
});

const scopeOfConfidentialInfo = String(extraction["scope_of_confidential_info"].value);
const permittedDisclosures = String(extraction["permitted_disclosures"].value);
const confidentialityDuration = String(extraction["confidentiality_duration"].value);
const returnOfMaterials = String(extraction["return_of_materials"].value);

// Step 2: Generate a compliance checklist spreadsheet
const checklist = await client.generateSheet({
  format: "xlsx",
  sheets: [
    {
      name: "NDA Compliance Checklist",
      columns: [
        { name: "Obligation", width: 35 },
        { name: "Details", width: 50 },
        { name: "Status", width: 15 },
        { name: "Due Date", width: 15 },
        { name: "Notes", width: 30 },
      ],
      rows: [
        [{ value: "Confidentiality scope acknowledged" }, { value: scopeOfConfidentialInfo }, { value: "Pending" }, { value: "" }, { value: "Brief internal team on scope" }],
        [{ value: "Permitted disclosure carve-outs documented" }, { value: permittedDisclosures }, { value: "Pending" }, { value: "" }, { value: "" }],
        [{ value: "Confidentiality end date tracked" }, { value: confidentialityDuration }, { value: "Pending" }, { value: "" }, { value: "Calendar reminder set" }],
        [{ value: "Return of materials process defined" }, { value: returnOfMaterials }, { value: "Pending" }, { value: "" }, { value: "Applies at termination" }],
      ],
    },
  ],
});
Response
{
  "success": true,
  "data": {
    "buffer": "UEsDBBQAAAA...",
    "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  }
}
Request
from iterationlayer import IterationLayer
client = IterationLayer(api_key="YOUR_API_KEY")

# Step 1: Extract NDA terms
extraction = client.extract(
    files=[{"type": "url", "name": "nda-vanguard-tech.pdf", "url": "https://example.com/legal/nda-vanguard-tech-2026.pdf"}],
    schema={
        "fields": [
            {"name": "disclosing_party", "type": "TEXT", "description": "Name of the disclosing party"},
            {"name": "receiving_party", "type": "TEXT", "description": "Name of the receiving party"},
            {"name": "effective_date", "type": "DATE", "description": "NDA effective date"},
            {"name": "confidentiality_duration", "type": "TEXT", "description": "Duration of confidentiality obligations"},
            {"name": "scope_of_confidential_info", "type": "TEXTAREA", "description": "Definition and scope of confidential information"},
            {"name": "permitted_disclosures", "type": "TEXTAREA", "description": "Exceptions or permitted disclosures"},
            {"name": "return_of_materials", "type": "TEXTAREA", "description": "Obligations to return or destroy materials"},
            {"name": "non_solicitation", "type": "BOOLEAN", "description": "Whether the NDA includes a non-solicitation clause"},
            {"name": "governing_law", "type": "TEXT", "description": "Governing law and jurisdiction"},
            {"name": "breach_remedies", "type": "TEXTAREA", "description": "Remedies available in case of breach"},
        ]
    },
)

scope_of_confidential_info = extraction["scope_of_confidential_info"]["value"]
permitted_disclosures = extraction["permitted_disclosures"]["value"]
confidentiality_duration = extraction["confidentiality_duration"]["value"]
return_of_materials = extraction["return_of_materials"]["value"]

# Step 2: Generate a compliance checklist spreadsheet
checklist = client.generate_sheet(
    format="xlsx",
    sheets=[
        {
            "name": "NDA Compliance Checklist",
            "columns": [
                {"name": "Obligation", "width": 35},
                {"name": "Details", "width": 50},
                {"name": "Status", "width": 15},
                {"name": "Due Date", "width": 15},
                {"name": "Notes", "width": 30},
            ],
            "rows": [
                [{"value": "Confidentiality scope acknowledged"}, {"value": scope_of_confidential_info}, {"value": "Pending"}, {"value": ""}, {"value": "Brief internal team on scope"}],
                [{"value": "Permitted disclosure carve-outs documented"}, {"value": permitted_disclosures}, {"value": "Pending"}, {"value": ""}, {"value": ""}],
                [{"value": "Confidentiality end date tracked"}, {"value": confidentiality_duration}, {"value": "Pending"}, {"value": ""}, {"value": "Calendar reminder set"}],
                [{"value": "Return of materials process defined"}, {"value": return_of_materials}, {"value": "Pending"}, {"value": ""}, {"value": "Applies at termination"}],
            ],
        }
    ],
)
Response
{
  "success": true,
  "data": {
    "buffer": "UEsDBBQAAAA...",
    "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  }
}
Request
package main

import (
    "fmt"

    il "github.com/iterationlayer/sdk-go"
)

func main() {
    client := il.NewClient("YOUR_API_KEY")

    // Step 1: Extract NDA terms
    extraction, err := client.Extract(il.ExtractRequest{
        Files: []il.FileInput{
            il.NewFileFromURL("nda-vanguard-tech.pdf", "https://example.com/legal/nda-vanguard-tech-2026.pdf"),
        },
        Schema: il.ExtractionSchema{
            "disclosing_party":          il.NewTextFieldConfig("disclosing_party", "Name of the disclosing party"),
            "receiving_party":           il.NewTextFieldConfig("receiving_party", "Name of the receiving party"),
            "effective_date":            il.NewDateFieldConfig("effective_date", "NDA effective date"),
            "confidentiality_duration":  il.NewTextFieldConfig("confidentiality_duration", "Duration of confidentiality obligations"),
            "scope_of_confidential_info": il.NewTextareaFieldConfig("scope_of_confidential_info", "Definition and scope of confidential information"),
            "permitted_disclosures":     il.NewTextareaFieldConfig("permitted_disclosures", "Exceptions or permitted disclosures"),
            "return_of_materials":       il.NewTextareaFieldConfig("return_of_materials", "Obligations to return or destroy materials"),
            "non_solicitation":          il.NewBooleanFieldConfig("non_solicitation", "Whether the NDA includes a non-solicitation clause"),
            "governing_law":             il.NewTextFieldConfig("governing_law", "Governing law and jurisdiction"),
            "breach_remedies":           il.NewTextareaFieldConfig("breach_remedies", "Remedies available in case of breach"),
        },
    })
    if err != nil {
        panic(err)
    }

    scopeOfConfidentialInfo := fmt.Sprintf("%v", (*extraction)["scope_of_confidential_info"].Value)
    permittedDisclosures := fmt.Sprintf("%v", (*extraction)["permitted_disclosures"].Value)
    confidentialityDuration := fmt.Sprintf("%v", (*extraction)["confidentiality_duration"].Value)
    returnOfMaterials := fmt.Sprintf("%v", (*extraction)["return_of_materials"].Value)

    // Step 2: Generate a compliance checklist spreadsheet
    _, err = client.GenerateSheet(il.GenerateSheetRequest{
        Format: "xlsx",
        Sheets: []il.Sheet{
            {
                Name: "NDA Compliance Checklist",
                Columns: []il.SheetColumn{
                    {Name: "Obligation", Width: 35}, {Name: "Details", Width: 50}, {Name: "Status", Width: 15}, {Name: "Due Date", Width: 15}, {Name: "Notes", Width: 30},
                },
                Rows: [][]il.SheetCell{
                    {{Value: "Confidentiality scope acknowledged"}, {Value: scopeOfConfidentialInfo}, {Value: "Pending"}, {Value: ""}, {Value: "Brief internal team"}},
                    {{Value: "Permitted disclosures documented"}, {Value: permittedDisclosures}, {Value: "Pending"}, {Value: ""}, {Value: ""}},
                    {{Value: "Confidentiality end date tracked"}, {Value: confidentialityDuration}, {Value: "Pending"}, {Value: ""}, {Value: "Calendar reminder set"}},
                    {{Value: "Return of materials process"}, {Value: returnOfMaterials}, {Value: "Pending"}, {Value: ""}, {Value: "Applies at termination"}},
                },
            },
        },
    })
    if err != nil {
        panic(err)
    }
}
Response
{
  "success": true,
  "data": {
    "buffer": "UEsDBBQAAAA...",
    "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
  }
}
Template
{
  "name": "Extract NDA terms and generate compliance checklist in Iteration Layer",
  "nodes": [
    {
      "parameters": {
        "content": "## Extract NDA Terms and Generate a Compliance Checklist\n\nLegal agencies managing NDAs across multiple clients use this pipeline to extract key confidentiality terms and generate standardized compliance checklists.\n\n**Note:** This workflow uses the Iteration Layer community node (`n8n-nodes-iterationlayer`). Install it via Settings > Community Nodes before importing. Self-hosted n8n only.",
        "height": 280,
        "width": 500,
        "color": 2
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [200, 40],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789001",
      "name": "Overview"
    },
    {
      "parameters": {
        "content": "### Step 1: Extract NDA Terms\nResource: **Document Extraction**\n\nConfigure the Document Extraction parameters below, then connect your credentials.",
        "height": 160,
        "width": 300,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [475, 100],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789002",
      "name": "Step 1 Note"
    },
    {
      "parameters": {
        "content": "### Step 2: Generate Checklist\nResource: **Sheet Generation**\n\nConfigure the Sheet Generation parameters below, then connect your credentials.",
        "height": 160,
        "width": 300,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [725, 100],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789003",
      "name": "Step 2 Note"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [250, 300],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789004",
      "name": "Manual Trigger"
    },
    {
      "parameters": {
        "resource": "documentExtraction",
        "schemaInputMode": "rawJson",
        "schemaJson": "{\"fields\":[{\"name\":\"disclosing_party\",\"type\":\"TEXT\",\"description\":\"Disclosing party\"},{\"name\":\"receiving_party\",\"type\":\"TEXT\",\"description\":\"Receiving party\"},{\"name\":\"effective_date\",\"type\":\"DATE\",\"description\":\"NDA effective date\"},{\"name\":\"confidentiality_duration\",\"type\":\"TEXT\",\"description\":\"Duration of obligations\"},{\"name\":\"scope_of_confidential_info\",\"type\":\"TEXTAREA\",\"description\":\"Scope of confidential information\"},{\"name\":\"permitted_disclosures\",\"type\":\"TEXTAREA\",\"description\":\"Permitted disclosures\"},{\"name\":\"return_of_materials\",\"type\":\"TEXTAREA\",\"description\":\"Return of materials\"},{\"name\":\"non_solicitation\",\"type\":\"BOOLEAN\",\"description\":\"Non-solicitation clause\"},{\"name\":\"governing_law\",\"type\":\"TEXT\",\"description\":\"Governing law\"},{\"name\":\"breach_remedies\",\"type\":\"TEXTAREA\",\"description\":\"Breach remedies\"}]}",
        "files": {
          "fileValues": [
            {
              "fileInputMode": "url",
              "fileName": "nda-vanguard-tech.pdf",
              "fileUrl": "https://example.com/legal/nda-vanguard-tech-2026.pdf"
            }
          ]
        }
      },
      "type": "n8n-nodes-iterationlayer.iterationLayer",
      "typeVersion": 1,
      "position": [500, 300],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789005",
      "name": "Extract NDA Terms",
      "credentials": {
        "iterationLayerApi": {
          "id": "1",
          "name": "Iteration Layer API"
        }
      }
    },
    {
      "parameters": {
        "resource": "sheetGeneration",
        "format": "xlsx",
        "sheetsJson": "[{\"name\":\"NDA Compliance Checklist\",\"columns\":[{\"name\":\"Obligation\",\"width\":35},{\"name\":\"Details\",\"width\":50},{\"name\":\"Status\",\"width\":15},{\"name\":\"Due Date\",\"width\":15},{\"name\":\"Notes\",\"width\":30}],\"rows\":[[{\"value\":\"Confidentiality scope acknowledged\"},{\"value\":\"{{ $json.scope_of_confidential_info }}\"},{\"value\":\"Pending\"},{\"value\":\"\"},{\"value\":\"Brief team\"}],[{\"value\":\"Permitted disclosures documented\"},{\"value\":\"{{ $json.permitted_disclosures }}\"},{\"value\":\"Pending\"},{\"value\":\"\"},{\"value\":\"\"}],[{\"value\":\"Confidentiality end date tracked\"},{\"value\":\"{{ $json.confidentiality_duration }}\"},{\"value\":\"Pending\"},{\"value\":\"\"},{\"value\":\"Set calendar reminder\"}],[{\"value\":\"Return of materials process\"},{\"value\":\"{{ $json.return_of_materials }}\"},{\"value\":\"Pending\"},{\"value\":\"\"},{\"value\":\"At termination\"}]]}]"
      },
      "type": "n8n-nodes-iterationlayer.iterationLayer",
      "typeVersion": 1,
      "position": [750, 300],
      "id": "b4c5d6e7-f8a9-0123-bcde-123456789006",
      "name": "Generate Checklist",
      "credentials": {
        "iterationLayerApi": {
          "id": "1",
          "name": "Iteration Layer API"
        }
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Extract NDA Terms",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract NDA Terms": {
      "main": [
        [
          {
            "node": "Generate Checklist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}
Prompt
Extract NDA terms from the document at [file URL], then generate a compliance checklist. Use the extract_document tool with these fields:

- disclosing_party (TEXT): Name of the disclosing party
- receiving_party (TEXT): Name of the receiving party
- effective_date (DATE): NDA effective date
- confidentiality_duration (TEXT): Duration of confidentiality obligations
- scope_of_confidential_info (TEXTAREA): Definition and scope of confidential information
- permitted_disclosures (TEXTAREA): Exceptions or permitted disclosures
- return_of_materials (TEXTAREA): Obligations to return or destroy materials
- non_solicitation (BOOLEAN): Whether the NDA includes a non-solicitation clause
- governing_law (TEXT): Governing law and jurisdiction
- breach_remedies (TEXTAREA): Remedies available in case of breach

Then use the generate_sheet tool to create an XLSX checklist with columns for Obligation, Details, Status, Due Date, and Notes, with one row per key obligation extracted from the NDA.

Related Recipes

Try with your own data

Get a free API key and run this recipe in minutes. No credit card required.