This workflow corresponds to n8n.io template #15263 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "GdzZh9q3qSFTQDoL",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Home Inventory - Notion",
"tags": [],
"nodes": [
{
"id": "890105d0-edc3-4fc7-bdca-5570e60aa98e",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
416
],
"parameters": {
"width": 480,
"height": 624,
"content": "## Home Inventory\n\n### How it works\n\n1. Initiates the workflow via a webhook trigger.\n2. Splits incoming data and converts it to files.\n3. Aggregates and processes data with AI for Notion integration.\n4. Manages file uploads to a Notion page.\n5. Updates page attachments with the uploaded file information.\n\n### Setup steps\n\n- [ ] Set up Webhook URL for data input\n- [ ] Configure API credentials for Notion integration\n- [ ] Ensure AI agent is configured for processing\n- [ ] Set up any required API keys for HTTP requests\n\n### Customization\n\nAdjust AI processing parameters for different data insights."
},
"typeVersion": 1
},
{
"id": "fd04cfd7-3bc8-4409-a82a-6e31cd96aef1",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
992,
400
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## Trigger and data split\n\nHandles incoming data and splits it for processing."
},
"typeVersion": 1
},
{
"id": "1482a224-a51e-47f8-9f68-82b435eed6cf",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1440,
400
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## File conversion and aggregation\n\nConverts data to files and aggregates it for AI processing."
},
"typeVersion": 1
},
{
"id": "ab9f8650-7210-4bb8-90f9-d2364aaa485a",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1888,
432
],
"parameters": {
"color": 7,
"width": 544,
"height": 480,
"content": "## AI processing and Notion entry\n\nProcesses data with AI and creates a page in Notion."
},
"typeVersion": 1
},
{
"id": "104fb555-6bcd-4c78-a352-2282d51350e5",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2464,
400
],
"parameters": {
"color": 7,
"width": 416,
"height": 304,
"content": "## File upload preparation\n\nPrepares and initiates file upload sessions to Notion."
},
"typeVersion": 1
},
{
"id": "afe43993-57a0-4afd-880e-7e3ab64fc715",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2912,
432
],
"parameters": {
"color": 7,
"width": 864,
"height": 272,
"content": "## Upload and update attachments\n\nUploads file content and updates attachments on a Notion page."
},
"typeVersion": 1
},
{
"id": "d41786c4-021a-4dbd-a964-105930b58204",
"name": "When Inventory Posted",
"type": "n8n-nodes-base.webhook",
"position": [
1040,
544
],
"parameters": {
"path": "inventory-notion",
"options": {},
"httpMethod": "POST",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cd559d1a-9300-4305-adb0-704c1e18cebb",
"name": "Home Inventory AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1936,
544
],
"parameters": {
"text": "={{ \n $('When Inventory Posted').item?.json?.body?.description \n ? `Item description: ${$('When Inventory Posted').item.json.body.description}` \n : \"No description given\" \n}}",
"options": {
"systemMessage": "You are an insurance inventory assistant. When a user submits one or more images of a personal\nproperty item, analyze the image(s) and produce a structured inventory record suitable for\ninsurance documentation.\n\n## Core Behavior\n\n- **Never ask clarifying questions.** You are operating as a system prompt in an API context.\n An item description may be provided in the user message, if it is, use it as clarifying information for your analysis. If it is not provided, or if the description doesn't appear to match the image(s) then make your best determination from the image(s) alone.\n- **Always produce a complete record**, even when information must be estimated. Use confident\n language for what you can observe and hedged language (e.g., \"estimated,\" \"approximately,\"\n \"likely\") for inferences.\n- **If multiple distinct items appear in the images**, produce one record per item unless they\n are clearly a set (e.g., a matched pair of speakers, a cookware set).\n- **If the image is too blurry, dark, or ambiguous** to identify the item, still produce a\n record and note the limitation in the Notes field.\n\n## Output Format\n\nAlways respond with a valid JSON object containing only the property item's inventory record. Output **only** the JSON --\nno preamble, no explanation, no markdown code fences. The response must be directly parseable.\n\nIf only one item is identified, still return an array with one element.\n\n### Schema\n\n```\n{\n\t\"type\": \"object\",\n\t\"properties\": {\n \"item_name\": \"string\",\n \"category\": \"string\",\n \"brand\": \"string\",\n \"model\": \"string\",\n \"serial_number\": \"string or null\",\n \"color_finish\": \"string\",\n \"condition\": {\"type\":\"string\",\n \"enum\": [\"Excellent\", \"Good\", \"Fair\", \"Poor\"]\n },\n \"description\": \"string\",\n \"msrp\": \"number\",\n \"current_value_low\": \"number\",\n \"current_value_high\": \"number\",\n \"replacement_cost\": \"number\",\n \"purchase_date\": \"string\",\n \"notes\": \"string\"\n\t},\n \"required\": [\"item_name\",\"category\", \"description\"]\n}\n```\n\n### Field Notes\n\n- **item_name**: Common descriptive name, e.g., `\"Apple MacBook Pro 14-inch Laptop\"`\n- **category**: Must be one of the defined categories exactly as spelled\n- **brand**: Brand or manufacturer name; `\"Unknown\"` if not visible\n- **model**: Model number, name, or style; `\"Unknown\"` if not determinable\n- **serial_number**: Exact value if visible in image; `null` if not visible\n- **msrp**: Numeric value in USD (e.g., `349.99`); `null` if not determinable. Do not include currency symbols.\n- **current_value_low / current_value_high**: Numeric USD range for fair market value. If a single point estimate is more appropriate, set both to the same value.\n- **replacement_cost**: Numeric USD cost to replace with a comparable new item today\n- **purchase_date**: ISO 8601 date string (`\"YYYY-MM-DD\"`) if determinable; `null` otherwise\n- **notes**: Any relevant information including visible damage, accessories present, special features, appraisal recommendations, coverage flags, or image quality limitations\n\n## Valuation Guidelines\n\nUse these principles when estimating values:\n\n**MSRP**\n- Use the original launch price for the model/generation you identify.\n- For vintage or discontinued items, use the original retail price at time of sale if estimable.\n- For handmade, custom, or one-of-a-kind items, state \"Custom/handmade -- MSRP not applicable.\"\n\n**Current Value (Fair Market Value)**\n- This is what a willing buyer would pay a willing seller today (e.g., eBay sold listings, Craigslist, Facebook Marketplace).\n- Apply typical depreciation for the category:\n - Electronics: 15-25% per year; steep in year 1-2\n - Appliances: 10-15% per year\n - Furniture: 20-30% first year, then slower\n - Jewelry & Watches: May hold or appreciate -- note if item appears to have intrinsic metal/gem value\n - Art & Collectibles: Highly variable -- note uncertainty\n - Clothing: 50-80% loss in year 1 unless designer/vintage\n - Musical instruments: Often holds value well, especially acoustic\n- Factor in visible condition.\n\n**Replacement Cost**\n- This is the cost to buy an equivalent new item at today's retail prices.\n- If the exact model is discontinued, use the closest current equivalent.\n- Replacement cost is almost always >= MSRP due to inflation, or may be lower if category has seen price drops (e.g., some electronics).\n\n**Confidence Language**\n- When you have high confidence (brand/model clearly visible): state values directly.\n- When you are estimating: prefix with \"Estimated\" and note the basis (e.g., \"Estimated based on visible model markings consistent with [product line]\").\n- When very uncertain: provide a wide range and explain in Notes.\n\n## Categories\n- Appliances\n- Art & Collectibles\n- Clothing\n- Electronics\n- Furniture\n- Firearms\n- Jewelry & Watches\n- Vehicles\n- Other\n\n### Category-Specific Notes\n\n**Electronics**: Note if charging cables, cases, or accessories are visible. Look for model numbers on labels, stickers, or visible screens.\n\n**Jewelry & Watches**: Note any visible hallmarks, engravings, maker's marks, or gemstones. Flag if item may require professional appraisal for accurate insurance valuation.\n\n**Art & Collectibles**: Note any signatures, certificates of authenticity, edition numbers, or framing. Flag for professional appraisal if the item appears to be fine art or a significant collectible.\n\n**Firearms**: List make, model, and caliber if visible. Do not estimate value beyond general range -- recommend professional appraisal and note that scheduled coverage may be required.\n\n**Vehicles**: Includes motorcycles, boats, ATVs. Use VIN if visible. Note that standard homeowners/renters policies typically exclude vehicles -- flag this in Notes.\n\n**Other**: Use only if no other category is applicable\n\n## Multiple Images of the Same Item\n\nIf the user submits multiple images that are clearly of the same item (different angles, close-ups of labels, etc.), synthesize all images into a single record. Use the additional views to improve accuracy of model identification, condition assessment, and serial number capture.\n\n## Example Output\n\n {\n \"item_name\": \"Sony WH-1000XM5 Wireless Noise-Canceling Headphones\",\n \"category\": \"Electronics\",\n \"brand\": \"Sony\",\n \"model\": \"WH-1000XM5\",\n \"serial_number\": null,\n \"color_finish\": \"Black with silver accents\",\n \"condition\": \"Good\",\n \"description\": \"Over-ear wireless Bluetooth headphones with active noise cancellation. Features fold-flat ear cups, premium leatherette padding, and a USB-C charging port. Carrying case is visible in image. Industry-leading noise cancellation flagship model released in 2022.\",\n \"msrp\": 349.99,\n \"current_value_low\": 180,\n \"current_value_high\": 220,\n \"replacement_cost\": 349.99,\n \"purchase_date\": null,\n \"notes\": \"Carrying case present, which adds minor resale value. Minor surface scratches visible on headband. No visible damage to ear cups or drivers. Value estimate based on approximately 2-3 years of depreciation at Good condition.\"\n }\n",
"passthroughBinaryImages": true
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "a9202a67-a5bb-46db-9184-7125afedb4a3",
"name": "Claude Sonnet Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1952,
768
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-6",
"cachedResultName": "Claude Sonnet 4.6"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "3d18abe8-8f26-480d-842b-1c6ce78be459",
"name": "Add Page to Notion",
"type": "n8n-nodes-base.notion",
"position": [
2288,
544
],
"parameters": {
"title": "={{ $json.output.item_name }}",
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "list",
"value": "b9ab2983-ab1e-45c9-bbee-f194af43c81e",
"cachedResultUrl": "https://www.notion.so/b9ab2983ab1e45c9bbeef194af43c81e",
"cachedResultName": "Personal Property Inventory"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Item Name|title",
"title": "={{ $json.output.item_name }}"
},
{
"key": "Category|select",
"selectValue": "={{ $json.output.category }}"
},
{
"key": "Description|rich_text",
"textContent": "={{ $json.output.description }}"
},
{
"key": "Notes|rich_text",
"textContent": "={{ $json.output.notes }}"
},
{
"key": "Current Value Low|number",
"numberValue": "={{ $json.output.current_value_low }}"
},
{
"key": "Current Value High|number",
"numberValue": "={{ $json.output.current_value_high }}"
}
]
}
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "c48916fb-34db-426d-a1c4-5b79d9fa7b2a",
"name": "Parse Structured Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2080,
768
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n \"item_name\": \"string\",\n \"category\": \"string\",\n \"brand\": \"string\",\n \"model\": \"string\",\n \"serial_number\": \"string or null\",\n \"color_finish\": \"string\",\n \"condition\": {\"type\":\"string\",\n \"enum\": [\"Excellent\", \"Good\", \"Fair\", \"Poor\"]\n },\n \"description\": \"string\",\n \"msrp\": \"number\",\n \"current_value_low\": \"number\",\n \"current_value_high\": \"number\",\n \"replacement_cost\": \"number\",\n \"purchase_date\": \"string\",\n \"notes\": \"string\"\n\t},\n \"required\": [\"item_name\",\"category\", \"description\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "28af7234-2de0-4f0c-ad84-54154ee5c9fd",
"name": "Aggregate Files",
"type": "n8n-nodes-base.aggregate",
"position": [
1712,
544
],
"parameters": {
"options": {
"includeBinaries": true
},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "data"
}
]
}
},
"typeVersion": 1
},
{
"id": "57121ea8-07e2-41e9-b076-0fbec77bc1ad",
"name": "Convert Images to Files",
"type": "n8n-nodes-base.convertToFile",
"position": [
1488,
544
],
"parameters": {
"options": {
"fileName": "={{ $now.format('yyyy-MM-dd-ss-SSS') }}-{{ $itemIndex }}"
},
"operation": "toBinary",
"sourceProperty": "body.images",
"binaryPropertyName": "=data"
},
"typeVersion": 1.1
},
{
"id": "a3c30894-8e30-408a-9f11-a4a669e6d4db",
"name": "Split Image Files",
"type": "n8n-nodes-base.splitOut",
"position": [
1264,
544
],
"parameters": {
"options": {},
"fieldToSplitOut": "body.images"
},
"typeVersion": 1
},
{
"id": "3c12b03e-545c-4343-b002-bcecfc9e9976",
"name": "Extract Image Keys",
"type": "n8n-nodes-base.code",
"position": [
2512,
544
],
"parameters": {
"jsCode": "// Split aggregated binaries into one item per image.\n// Each item carries the binary so subsequent HTTP Request nodes can upload it.\nconst aggregated = $('Aggregate Files').first();\nconst pageId = $('Add Page to Notion').first().json.id;\nconst binaries = aggregated.binary || {};\n\nconst keys = Object.keys(binaries);\nif (keys.length === 0) {\n throw new Error('No binary images found in Aggregate output');\n}\n\nreturn keys.map(key => ({\n json: {\n binaryKey: key,\n pageId,\n mimeType: binaries[key].mimeType || 'image/jpeg',\n fileName: binaries[key].fileName || `photo-${key}.jpg`,\n },\n binary: {\n currentFile: binaries[key]\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "c504f974-e660-4d80-a75e-658fb446091e",
"name": "Initiate Notion Upload Session",
"type": "n8n-nodes-base.httpRequest",
"position": [
2736,
544
],
"parameters": {
"url": "https://api.notion.com/v1/file_uploads",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "content_type",
"value": "={{ $json.mimeType }}"
},
{
"name": "name",
"value": "={{ $json.fileName }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Notion-Version",
"value": "2022-06-28"
}
]
},
"nodeCredentialType": "notionApi"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "74fcb3c8-4ddc-4415-a60d-3501c54c66e1",
"name": "Attach Upload Context",
"type": "n8n-nodes-base.code",
"position": [
2960,
544
],
"parameters": {
"jsCode": "// HTTP Request (Create Upload Session) replaces the item json with the API response,\n// clearing any binary data from the input. Re-attach the binary here by pairing\n// each session item with its corresponding item from Get Binary Keys (by index).\nconst sessionItems = $('Initiate Notion Upload Session').all();\nconst binaryItems = $('Extract Image Keys').all();\n\nreturn sessionItems.map((sessionItem, i) => ({\n json: {\n upload_id: sessionItem.json.id,\n upload_url: sessionItem.json.upload_url,\n pageId: binaryItems[i].json.pageId,\n mimeType: binaryItems[i].json.mimeType,\n fileName: binaryItems[i].json.fileName,\n },\n binary: {\n currentFile: binaryItems[i].binary.currentFile\n }\n}));\n"
},
"typeVersion": 2
},
{
"id": "0112ddbf-fd67-45cc-a86c-7a24e3306523",
"name": "Upload Images to Notion",
"type": "n8n-nodes-base.httpRequest",
"position": [
3184,
544
],
"parameters": {
"url": "={{ $json.upload_url }}",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "currentFile"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "={{ $json.mimeType }}"
}
]
},
"nodeCredentialType": "notionApi"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "3b28021b-02ac-48eb-9bb2-80f0a56e2086",
"name": "Gather Upload Identifiers",
"type": "n8n-nodes-base.code",
"position": [
3408,
544
],
"parameters": {
"jsCode": "// After all images have been uploaded, collect every upload_id from\n// Attach Binary Context and build the Notion Files property payload.\nconst contextItems = $('Attach Upload Context').all();\nconst pageId = contextItems[0].json.pageId;\n\nconst files = contextItems.map(item => ({\n type: 'file_upload',\n file_upload: { id: item.json.upload_id }\n}));\n\nreturn [{ json: { pageId, files } }];\n"
},
"typeVersion": 2
},
{
"id": "3fb4a42d-a061-498b-974e-9a041ae08bdb",
"name": "Update Notion Attachments",
"type": "n8n-nodes-base.httpRequest",
"position": [
3632,
544
],
"parameters": {
"url": "=https://api.notion.com/v1/pages/{{ $json.pageId }}",
"method": "PATCH",
"options": {},
"jsonBody": "={{ ({ properties: { Attachments: { files: $json.files } } }) }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Notion-Version",
"value": "2022-06-28"
}
]
},
"nodeCredentialType": "notionApi"
},
"credentials": {
"notionApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": "WRe-Uudd4ntUdn0ApI0gA",
"timeSavedMode": "fixed",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "b6f3591e-8ba8-4c03-b95f-09c0382a1d70",
"connections": {
"Aggregate Files": {
"main": [
[
{
"node": "Home Inventory AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Split Image Files": {
"main": [
[
{
"node": "Convert Images to Files",
"type": "main",
"index": 0
}
]
]
},
"Add Page to Notion": {
"main": [
[
{
"node": "Extract Image Keys",
"type": "main",
"index": 0
}
]
]
},
"Extract Image Keys": {
"main": [
[
{
"node": "Initiate Notion Upload Session",
"type": "main",
"index": 0
}
]
]
},
"Claude Sonnet Model": {
"ai_languageModel": [
[
{
"node": "Home Inventory AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Attach Upload Context": {
"main": [
[
{
"node": "Upload Images to Notion",
"type": "main",
"index": 0
}
]
]
},
"When Inventory Posted": {
"main": [
[
{
"node": "Split Image Files",
"type": "main",
"index": 0
}
]
]
},
"Convert Images to Files": {
"main": [
[
{
"node": "Aggregate Files",
"type": "main",
"index": 0
}
]
]
},
"Home Inventory AI Agent": {
"main": [
[
{
"node": "Add Page to Notion",
"type": "main",
"index": 0
}
]
]
},
"Parse Structured Output": {
"ai_outputParser": [
[
{
"node": "Home Inventory AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Upload Images to Notion": {
"main": [
[
{
"node": "Gather Upload Identifiers",
"type": "main",
"index": 0
}
]
]
},
"Gather Upload Identifiers": {
"main": [
[
{
"node": "Update Notion Attachments",
"type": "main",
"index": 0
}
]
]
},
"Initiate Notion Upload Session": {
"main": [
[
{
"node": "Attach Upload Context",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
anthropicApihttpHeaderAuthnotionApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
An AI model identifies, describes, and give an estimated value range of a personal property item based on pictures of the item. One of more images, and an optional description, are posted to a n8n webhook. Note that the images should be of the same item. Submitting multiple…
Source: https://n8n.io/workflows/15263/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
⏺ 🚀 How it works
Resume Screening & Behavioral Interviews with Gemini, Elevenlabs, & Notion ATS copy. Uses outputParserStructured, chainLlm, googleDrive, stickyNote. Webhook trigger; 67 nodes.
Candidate Engagement | Resume Screening | AI Voice Interviews | Applicant Insights
Fully automates your service order pipeline from incoming booking to supplier confirmation — with built-in SLA enforcement and automatic escalation if a supplier goes silent. 📥 Receives orders via web
Tired of grinding out YouTube content? This n8n workflow turns AI into your personal video factory—creating engaging, faceless shorts on autopilot. Perfect for creators, marketers, or side-hustlers lo