AutomationFlowsData & Sheets › Log Weekly Google Patents Watch Results to Google Sheets with Apify

Log Weekly Google Patents Watch Results to Google Sheets with Apify

ByJohnVC @johnvc on n8n.io

No IP watch service and no per-seat subscription. Every week this searches Google Patents for the technologies you follow and appends one row per patent to Google Sheets: title, assignee, inventor, publication and filing dates, the abstract, and a link to the patent. Runs every…

Cron / scheduled trigger★★★★☆ complexity17 nodes@Apify/N8N Nodes ApifyGoogle Sheets
Data & Sheets Trigger: Cron / scheduled Nodes: 17 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #17779 — we link there as the canonical source.

This workflow follows the Apifyn8N Nodes Apify → Google Sheets 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 →

Download .json
{
  "name": "Automate patent monitoring on Google Patents into Google Sheets",
  "nodes": [
    {
      "id": "d9a2b316-0001-4e01-9001-000000000001",
      "name": "Every Monday morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        520
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d9a2b316-0002-4e02-9002-000000000002",
      "name": "Set your patent watch list",
      "type": "n8n-nodes-base.set",
      "position": [
        260,
        520
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d9a2b316-0011-4e11-9011-+1234567890",
              "name": "watchTerms",
              "type": "array",
              "value": "[\"solid state battery\", \"sodium ion battery\"]"
            },
            {
              "id": "d9a2b316-0012-4e12-9012-+1234567890",
              "name": "assignee",
              "type": "string",
              "value": ""
            },
            {
              "id": "d9a2b316-0013-4e13-9013-+1234567890",
              "name": "country",
              "type": "string",
              "value": "US"
            },
            {
              "id": "d9a2b316-0014-4e14-9014-+1234567890",
              "name": "lookbackDays",
              "type": "number",
              "value": "90"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d9a2b316-0003-4e03-9003-000000000003",
      "name": "One search per watch term",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        520,
        520
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {},
        "fieldToSplitOut": "watchTerms"
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0004-4e04-9004-000000000004",
      "name": "Search Google Patents",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        780,
        520
      ],
      "parameters": {
        "memory": 1024,
        "actorId": "johnvc~google-patents-api",
        "resource": "Actors",
        "operation": "Run actor and get dataset",
        "customBody": "={{ JSON.stringify({ q: $json.watchTerms, assignee: $json.assignee || undefined, country: $json.country, after: 'publication:' + $now.minus({ days: $json.lookbackDays }).toFormat('yyyyMMdd'), num: 10, max_pages: 1, no_cache: true, include_ai_summary: false }) }}"
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0005-4e05-9005-000000000005",
      "name": "Keep terms that returned patents",
      "type": "n8n-nodes-base.filter",
      "position": [
        1040,
        520
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d9a2b316-0041-4e41-9041-+1234567890",
              "operator": {
                "type": "array",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.patents }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d9a2b316-0006-4e06-9006-000000000006",
      "name": "One row per patent",
      "type": "n8n-nodes-base.code",
      "position": [
        1300,
        520
      ],
      "parameters": {
        "jsCode": "// Expand each search into one row per patent, and flatten the fields that\n// arrive as arrays so a spreadsheet cell can hold them.\nconst weekOf = $now.toFormat('yyyy-MM-dd');\n\nconst list = (v) => (Array.isArray(v) ? v.filter(Boolean).join(', ') : String(v || ''));\nconst clip = (s, n) => {\n  const v = String(s || '').replace(/\\s+/g, ' ').trim();\n  return v.length > n ? v.slice(0, n - 3) + '...' : v;\n};\n\nconst rows = [];\nfor (const item of $input.all()) {\n  const term = (item.json.search_parameters || {}).q || '';\n  for (const p of item.json.patents || []) {\n    rows.push({\n      json: {\n        'Week of': weekOf,\n        'Watch term': term,\n        Title: clip(p.title, 200),\n        Assignee: list(p.assignee),\n        Inventor: list(p.inventor),\n        'Publication number': p.publication_number || '',\n        'Publication date': p.publication_date || '',\n        'Filing date': p.filing_date || '',\n        Summary: clip(p.snippet, 500),\n        'Patent link': p.patent_link || '',\n      },\n    });\n  }\n}\nreturn rows;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "d9a2b316-0007-4e07-9007-000000000007",
      "name": "Append patents to sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1560,
        520
      ],
      "parameters": {
        "columns": {
          "value": {},
          "mappingMode": "autoMapInputData",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "d9a2b316-0090-4e90-9090-000000000090",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -620,
        40
      ],
      "parameters": {
        "width": 520,
        "height": 1240,
        "content": "## Automate patent monitoring on Google Patents into Google Sheets\n\nNo IP watch service and no per-seat subscription. Every week this searches Google Patents for the technologies you are watching and appends one row per patent to your sheet: title, assignee, inventor, publication and filing dates, the abstract, and a link to the patent itself.\n\nSet an assignee and it becomes a competitor watch instead: every patent a named company has published inside your date window, which is the closest thing there is to reading their R&D roadmap.\n\n**Who's it for**\nR&D teams tracking a field, IP counsel watching a competitor's filings, and founders who want to know whether the thing they are about to build is already patented.\n\n**How it works**\n1. A schedule trigger fires once a week\n2. One Set node holds your watch terms, an optional assignee, and the lookback window\n3. The Apify node runs one Google Patents search per term\n4. A Code node turns each search into one row per patent\n\n**Setup**\n1. Create a free Apify account and add your API token to the Apify credential\n2. Connect your Google account in the Sheets node and pick a spreadsheet\n3. Replace the example watch terms in the config node, and set an assignee if you want to follow one company\n\n**Good to know**\nAbout 4 cents per watch term per week, so three terms is roughly 12 cents a week.\nPatents publish about 18 months after filing, so this shows what is newly PUBLISHED, not newly invented.\nKeep the lookback at 90 days or more. Publication happens in batches and a narrow niche can go weeks with nothing, so a 30 or 60 day window often returns an empty sheet rather than a useful one.\nRows are appended every run, so de-duplicate on Publication number when you chart it.\nActor: https://apify.com/johnvc/google-patents-api?fpr=9n7kx3&fp_sid=n8n"
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0091-4e91-9091-000000000091",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 1. Schedule\nRuns every Monday morning. Change the cadence, or swap in a manual trigger while you test."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0092-4e92-9092-000000000092",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 2. Your input\nWatch terms, an optional assignee, the country, and how far back to look. This is the only node you edit. Keep the lookback at 90 days or more."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0093-4e93-9093-000000000093",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 3. Fan out\nTurns your watch list into one Google Patents search each."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0094-4e94-9094-000000000094",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        740,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 4. Search\nRuns the Google Patents API actor for one term. Add your Apify credential here."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0095-4e95-9095-000000000095",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 5. Clean\nSkips any term that returned no patents, so blank rows never reach the sheet."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0096-4e96-9096-000000000096",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 6. Shape\nOne row per patent, with the assignee and inventor lists flattened for a spreadsheet."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0097-4e97-9097-000000000097",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1520,
        60
      ],
      "parameters": {
        "color": 7,
        "width": 240,
        "height": 240,
        "content": "### 7. Deliver\nPick your spreadsheet and tab. Columns map automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0080-4e80-9080-000000000080",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        860
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 240,
        "content": "### Why not sort by newest?\nSorting Google Patents by newest returns the newest patents overall and quietly ignores your search term. This uses relevance plus a publication-date window instead, which is what actually gives you new AND on-topic results."
      },
      "typeVersion": 1
    },
    {
      "id": "d9a2b316-0081-4e81-9081-000000000081",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        660,
        860
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 240,
        "content": "### Self-hosting n8n?\nThere is also a dedicated community node for this actor: `n8n-nodes-google-patents-api` on npm."
      },
      "typeVersion": 1
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "One row per patent": {
      "main": [
        [
          {
            "node": "Append patents to sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every Monday morning": {
      "main": [
        [
          {
            "node": "Set your patent watch list",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Google Patents": {
      "main": [
        [
          {
            "node": "Keep terms that returned patents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "One search per watch term": {
      "main": [
        [
          {
            "node": "Search Google Patents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set your patent watch list": {
      "main": [
        [
          {
            "node": "One search per watch term",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Keep terms that returned patents": {
      "main": [
        [
          {
            "node": "One row per patent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

No IP watch service and no per-seat subscription. Every week this searches Google Patents for the technologies you follow and appends one row per patent to Google Sheets: title, assignee, inventor, publication and filing dates, the abstract, and a link to the patent. Runs every…

Source: https://n8n.io/workflows/17779/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

No rank tracker subscription and no SERP API key. This template checks where your business ranks in Google's local results for the keywords you choose, every week, and appends one row per listing to G

@Apify/N8N Nodes Apify, Google Sheets
Data & Sheets

No Firecrawl API key and no OpenAI key. This template checks every week whether any member of Congress disclosed a trade in the stocks you follow, and appends one row per transaction to Google Sheets:

@Apify/N8N Nodes Apify, Google Sheets
Data & Sheets

No Google Business Profile connection and no SerpApi or Bright Data account. This template runs weekly review tracking across the whole Google local pack for your search term, appending one row per bu

@Apify/N8N Nodes Apify, Google Sheets
Data & Sheets

This workflow runs every Monday morning, searches Google Shopping for a list of products using Apify, summarizes credible weekly pricing metrics per product, and appends the results to a Google Sheets

@Apify/N8N Nodes Apify, Google Sheets
Data & Sheets

No stock agency monitoring service and no per-image fee. Every week this looks up the images you list and appends one row per page carrying that exact image to Google Sheets: the site, the page title,

@Apify/N8N Nodes Apify, Google Sheets