Saltar al contenido

Creación Dinámica de Tablas en Airtable para Formularios Webflow

Este workflow de n8n crea dinámicamente tablas en Airtable para cada formulario de Webflow, y guarda cada envío de formulario como un registro en su tabla correspondiente, incluyendo manejo de tablas índice.

AIRepo Original 21 nodos 9 tipos conectado
Cargando workflow...

Nodos

Set ManualTrigger HttpRequest If Wait Code SplitInBatches StickyNote ConvertToFile

Detalles

ID
3809
Nodos
21
Conex.
Tipos
9

Pertenece a:

¿Qué hace este workflow?

Este workflow está diseñado para automatizar las auditorías SEO de contenido web, ideal para especialistas en marketing, agencias y webmasters que buscan optimizar su estrategia de SEO on-page y técnico. Inicia obteniendo datos brutos de auditoría, extrayendo URLs y consultando la API de Google Search Console para recopilar métricas de rendimiento clave, incluyendo errores 404 y redirecciones 301. Posteriormente, fusiona y mapea estos datos para construir una estructura de informe completa, que se genera finalmente como un informe HTML descargable. Esta automatización elimina la necesidad de procesos manuales tediosos, liberando tiempo valioso para el análisis estratégico y la implementación de mejoras. Asegura informes consistentes y precisos, facilitando la identificación rápida de oportunidades de optimización y la resolución de problemas técnicos, lo que se traduce en una mejora tangible del posicionamiento orgánico.

¿Cómo funciona?

Este workflow usa 21 nodos conectados con 9 tipos diferentes: Set, ManualTrigger, HttpRequest, If, Wait y 4 más. La estructura está totalmente conectada — listo para importar.

¿Para quién es?

Diseñado para empresas de Agencias de Marketing y equipos de Marketing & Email. Nivel avanzado — recomendado para usuarios experimentados. Alto valor de negocio: automatiza una tarea recurrente con impacto directo.

¿Lo quieres en tu empresa?

Lo implementamos por ti end-to-end: integración, deploy, mantenimiento y soporte. Consultoría B2B con Genai Sapiens.

Hablemos de tu proyecto

¿Quieres aprender a hacerlo?

Sprints de 30 días con companion IA + comunidad. Aprende n8n, automatización y agentes IA desde cero o nivel avanzado.

Ver formación Momentum

Workflows similares

\n\n\n
\n
\n
\n
\n \"${companyName}\n
\n

Content Audit Report

\n

for ${websiteDomain}

\n
\n
\n
\n

Generated on: ${formattedDate}

\n

By: ${companyName}

\n
\n
\n
\n
\n\n
\n
\n

Executive Summary

\n

This report provides a comprehensive analysis of content issues found on ${websiteDomain}. We've identified ${totalIssues} issues across ${auditData.summary.pages} pages that need attention to improve SEO performance and user experience.

\n \n
\n
\n
\n Pages Analyzed\n
\n
${auditData.summary.pages}
\n
\n \n
\n
\n Total Issues\n
\n
${totalIssues}
\n
\n \n
\n
\n Health Score\n
\n
${calculateHealthScore(auditData.summary.pages, totalIssues)}%
\n
\n
\n
\n
\n
\n \n
\n

Key Recommendations

\n
    \n ${getTopRecommendations(auditData).map(rec => `
  • ${rec.text} ${rec.priority}
  • `).join('')}\n
\n
\n
\n\n
\n

Issues Breakdown

\n \n
\n
\n

Content Quality

\n
\n
\n Outdated Content\n ${auditData.summary.issues.outdated}\n
\n
\n Thin Content\n ${auditData.summary.issues.thin}\n
\n
\n Readability Issues\n ${auditData.summary.issues.readability}\n
\n
\n Large HTML\n ${auditData.summary.issues.largeHTML}\n
\n
\n
\n \n
\n

Technical SEO

\n
\n
\n 404 Errors\n ${auditData.summary.issues['404']}\n
\n
\n Redirects\n ${auditData.summary.issues.redirects}\n
\n
\n Canonicalization Issues\n ${auditData.summary.issues.canonicalised}\n
\n
\n
\n \n
\n

On-Page SEO

\n
\n
\n Title Length Issues\n ${auditData.summary.issues.titleLen}\n
\n
\n Description Issues\n ${auditData.summary.issues.descriptionLen}\n
\n
\n Missing/Duplicate Meta\n ${auditData.summary.issues.missingOrDuplicateMeta}\n
\n
\n H1 Issues\n ${auditData.summary.issues.h1Issues}\n
\n
\n
\n \n
\n

Internal Linking

\n
\n
\n Excessive Click Depth\n ${auditData.summary.issues.excessiveClickDepth}\n
\n
\n Orphan Pages\n ${auditData.summary.issues.orphan}\n
\n
\n Low Internal Links\n ${auditData.summary.issues.lowInternalLinks}\n
\n
\n
\n \n
\n

Performance

\n
\n
\n Underperforming Pages\n ${auditData.summary.issues.underperforming}\n
\n
\n
\n
\n
\n\n \n
\n

Status Issues

\n \n

404 Errors (${(auditData.issues.statusIssues.pages404 || []).length})

\n ${(auditData.issues.statusIssues.pages404 || []).length === 0 ? \n `

No issues found.

` : \n (() => {\n const items = auditData.issues.statusIssues.pages404 || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\n \n \n \n \n \n \n \n \n \n ${initialItems.map(item => `\n \n \n \n \n \n `).join('')}\n \n ${hasMoreItems ? `\n \n ${hiddenItems.map(item => `\n \n \n \n \n \n `).join('')}\n \n ` : ''}\n
URLSource LinksRecommendation
${item.url}\n ${item.sources && item.sources.length > 0 ? \n `\n
\n ${renderSourceLinks(item.sources)}\n
` : \n `No source links found`\n }\n
${item.todo}
${item.url}\n ${item.sources && item.sources.length > 0 ? \n `\n
\n ${renderSourceLinks(item.sources)}\n
` : \n `No source links found`\n }\n
${item.todo}
\n ${hasMoreItems ? `\n
\n \n
\n ` : ''}\n `;\n })()\n }\n \n

301 Redirects (${(auditData.issues.statusIssues.redirects301 || []).length})

\n ${(auditData.issues.statusIssues.redirects301 || []).length === 0 ? \n `

No issues found.

` : \n (() => {\n const items = auditData.issues.statusIssues.redirects301 || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\n \n \n \n \n \n \n \n \n \n ${initialItems.map(item => `\n \n \n \n \n \n `).join('')}\n \n ${hasMoreItems ? `\n \n ${hiddenItems.map(item => `\n \n \n \n \n \n `).join('')}\n \n ` : ''}\n
URLSource LinksRecommendation
${item.url}\n ${item.sources && item.sources.length > 0 ? \n `\n
\n ${renderSourceLinks(item.sources)}\n
` : \n `No source links found`\n }\n
${item.todo}
${item.url}\n ${item.sources && item.sources.length > 0 ? \n `\n
\n ${renderSourceLinks(item.sources)}\n
` : \n `No source links found`\n }\n
${item.todo}
\n ${hasMoreItems ? `\n
\n \n
\n ` : ''}\n `;\n })()\n }\n \n

Canonicalization Issues (${(auditData.issues.statusIssues.canonicalised || []).length})

\n ${renderTableSection(auditData.issues.statusIssues.canonicalised, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Canonical URL', render: item => item.canonical || '—' },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
\n\n \n
\n

Content Quality Issues

\n \n

Outdated Content (${(auditData.issues.contentQuality.staleLastModified || []).length})

\n ${renderTableSection(auditData.issues.contentQuality.staleLastModified, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Last Modified', render: item => item.lastModified },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Thin Content (${(auditData.issues.contentQuality.thinContent || []).length})

\n ${renderTableSection(auditData.issues.contentQuality.thinContent, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Word Count', render: item => item.words },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Readability Issues (${(auditData.issues.contentQuality.readability || []).length})

\n ${renderTableSection(auditData.issues.contentQuality.readability, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'F-K Score', render: item => item.score.toFixed(1) },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Outdated Meta Years (${(auditData.issues.contentQuality.outdatedMetaYear || []).length})

\n ${renderTableSection(auditData.issues.contentQuality.outdatedMetaYear, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Field', render: item => item.field },\n { header: 'Years', render: item => item.years },\n { header: 'Original Text', render: item => item.original },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Large HTML (${(auditData.issues.contentQuality.largeHTML || []).length})

\n ${renderTableSection(auditData.issues.contentQuality.largeHTML, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Size (bytes)', render: item => item.size ? item.size.toLocaleString() : 'N/A' },\n { header: 'DOM Size (bytes)', render: item => item.totalDom ? item.totalDom.toLocaleString() : 'N/A' },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
\n \n \n
\n

Metadata & SEO Issues

\n \n

Title Length Issues (${(auditData.issues.metadataSEO.titleLength || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.titleLength, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Length', render: item => `${item.length} characters` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Description Length Issues (${(auditData.issues.metadataSEO.descriptionLength || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.descriptionLength, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Length', render: item => `${item.length} characters` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Missing Titles (${(auditData.issues.metadataSEO.missingTitle || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.missingTitle, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Missing Descriptions (${(auditData.issues.metadataSEO.missingDescription || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.missingDescription, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Duplicate Titles (${(auditData.issues.metadataSEO.duplicateTitle || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.duplicateTitle, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Title', render: item => item.title },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Duplicate Descriptions (${(auditData.issues.metadataSEO.duplicateDescription || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.duplicateDescription, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Description', render: item => item.description },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

H1 Issues (${(auditData.issues.metadataSEO.h1Issues || []).length})

\n ${renderTableSection(auditData.issues.metadataSEO.h1Issues, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'H1 Count', render: item => item.h1Count },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
\n \n \n
\n

Internal Linking Issues

\n \n

Excessive Click Depth (${(auditData.issues.internalLinking.excessiveClickDepth || []).length})

\n ${renderTableSection(auditData.issues.internalLinking.excessiveClickDepth, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Click Depth', render: item => item.depth },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Orphan Pages (${(auditData.issues.internalLinking.orphanPages || []).length})

\n ${renderTableSection(auditData.issues.internalLinking.orphanPages, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n \n

Low Internal Links (${(auditData.issues.internalLinking.lowInternalLinks || []).length})

\n ${renderTableSection(auditData.issues.internalLinking.lowInternalLinks, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Internal Links', render: item => item.links },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
\n \n \n
\n

Performance Issues

\n \n

Underperforming Content (${(auditData.issues.underperformingContent || []).length})

\n ${renderTableSection(auditData.issues.underperformingContent, [\n { header: 'URL', class: 'url-cell', render: item => `${item.url}` },\n { header: 'Clicks', render: item => item.clicks },\n { header: 'Impressions', render: item => item.impressions },\n { header: 'Last Modified', render: item => item.lastModified },\n { header: 'Recommendation', class: 'todo-cell', render: item => item.todo }\n ])}\n
\n\n
\n

All Pages Overview

\n

Below is a summary of all pages analyzed with their respective issues flagged.

\n \n ${(() => {\n const items = auditData.pages || [];\n const showInitial = 10; // Number of rows to show initially\n const hasMoreItems = items.length > showInitial;\n const initialItems = hasMoreItems ? items.slice(0, showInitial) : items;\n const hiddenItems = hasMoreItems ? items.slice(showInitial) : [];\n \n return `\n \n \n \n \n \n \n \n \n \n \n ${initialItems.map(page => `\n \n \n \n \n \n \n `).join('')}\n \n ${hasMoreItems ? `\n \n ${hiddenItems.map(page => `\n \n \n \n \n \n \n `).join('')}\n \n ` : ''}\n
URLIssuesClicksImpressions
${page.url}${page.flags.map(flag => `${formatFlagName(flag)}`).join('')}${page.clicks !== null ? page.clicks : 'N/A'}${page.impressions !== null ? page.impressions : 'N/A'}
${page.url}${page.flags.map(flag => `${formatFlagName(flag)}`).join('')}${page.clicks !== null ? page.clicks : 'N/A'}${page.impressions !== null ? page.impressions : 'N/A'}
\n ${hasMoreItems ? `\n
\n \n
\n ` : ''}\n `;\n })()}\n
\n \n
\n

Recommended Next Steps

\n

Based on our analysis, we recommend the following actions to improve your content performance:

\n \n
\n

Priority Actions

\n
    \n ${auditData.summary.issues['404'] > 0 ? \n `
  • Fix 404 errors by restoring pages or implementing proper redirects
  • ` : ''}\n ${auditData.summary.issues.redirects > 0 ? \n `
  • Update internal links to point directly to final URLs instead of through redirects
  • ` : ''}\n ${auditData.summary.issues.thin > 0 ? \n `
  • Expand thin content pages to at least 1,500 words with valuable, unique information
  • ` : ''}\n ${auditData.summary.issues.outdated > 0 ? \n `
  • Update all content that hasn't been refreshed in the last 12 months
  • ` : ''}\n ${auditData.summary.issues.missingOrDuplicateMeta > 0 ? \n `
  • Add unique meta descriptions to all pages missing them
  • ` : ''}\n ${auditData.summary.issues.titleLen > 0 ? \n `
  • Optimize page titles to be between 40-60 characters
  • ` : ''}\n ${auditData.summary.issues.descriptionLen > 0 ? \n `
  • Optimize meta descriptions to be between 70-155 characters
  • ` : ''}\n ${auditData.summary.issues.readability > 0 ? \n `
  • Improve content readability by simplifying language and shortening sentences
  • ` : ''}\n ${auditData.summary.issues.underperforming > 0 ? \n `
  • Identify keywords with potential for pages with high impressions but low clicks
  • ` : ''}\n ${auditData.summary.issues.orphan > 0 ? \n `
  • Create internal links to orphan pages to improve crawlability
  • ` : ''}\n ${auditData.summary.issues.lowInternalLinks > 0 ? \n `
  • Improve internal linking between related content
  • ` : ''}\n
  • Implement a content calendar to regularly refresh content
  • \n
  • Conduct keyword research to identify new content opportunities
  • \n
\n
\n \n

Implementation Timeline

\n

We recommend addressing these issues in the following order:

\n \n
    \n
  1. Immediate (1-2 weeks): Fix technical issues like 404 errors, redirects, missing meta descriptions, and outdated year references.
  2. \n
  3. Short-term (2-4 weeks): Update thin content and improve readability on key pages.
  4. \n
  5. Medium-term (1-2 months): Refresh outdated content, especially on high-impression pages.
  6. \n
  7. Long-term (2-3 months): Implement a content calendar to regularly update content and prevent future staleness.
  8. \n
\n
\n
\n\n \n\n`\n}];"},"typeVersion":2},{"id":"b772f856-e1cf-44fd-8fc7-1ac5d8b033ca","name":"Extract 404 & 301","type":"n8n-nodes-base.code","position":[1880,500],"parameters":{"jsCode":"// Get input data from the updated node\nconst input = $('Get RAW Audit Data').first().json;\n\n// Initialize an array to store the new items\nconst output = [];\n\n// Loop through tasks\nconst tasks = input.tasks || [];\nfor (const task of tasks) {\n const results = task.result || [];\n for (const result of results) {\n const items = result.items || [];\n for (const page of items) {\n // Only include URLs with status_code 404 or 301\n if (page.url && (page.status_code === 404 || page.status_code === 301)) {\n output.push({ json: { url: page.url, status_code: page.status_code } });\n }\n }\n }\n}\n\n// Return filtered URLs with status codes 404 or 301\nreturn output;\n"},"typeVersion":2},{"id":"2bc70a8c-5c2d-4cb5-be4f-8d051f32ad23","name":"Loop Over Items1","type":"n8n-nodes-base.splitInBatches","position":[2100,500],"parameters":{"options":{}},"typeVersion":3},{"id":"4defc61c-7f05-4b64-9b68-96f097a9ba92","name":"Map URLs Data","type":"n8n-nodes-base.code","position":[2520,500],"parameters":{"jsCode":"// Get the input data\nconst input = items[0].json;\n\n// Access the items array\nconst linkItems = input.tasks[0].result[0].items;\n\n// Extract the target URL and status code from the first item\nconst url = linkItems[0].link_to;\nconst pageStatus = linkItems[0].page_to_status_code;\n\n// Build the output object\nconst output = {\n URL: url,\n page_to_status_code: pageStatus,\n sources: linkItems.map(item => ({\n type: item.type,\n link_from: item.link_from,\n text: item.text\n }))\n};\n\n// Return formatted output\nreturn [{ json: output }];\n"},"typeVersion":2},{"id":"bbf44181-0ea7-48b2-b89e-143d72460d27","name":"Get Source URLs Data","type":"n8n-nodes-base.httpRequest","position":[2320,500],"parameters":{"url":"https://api.dataforseo.com/v3/on_page/links","method":"POST","options":{},"jsonBody":"=[\n {\n \"id\": \"{{ $('Get RAW Audit Data').first().json.tasks[0].id }}\",\n \"page_to\": \"{{ $json.url }}\"\n }\n]","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpBasicAuth","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"cae4d8e7-5a63-417d-a025-3f6631ead225","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[0,0],"parameters":{"width":940,"height":580,"content":"## Content SEO Audit Report\nA workflow powered by DataForSEO and Google Search Analytics API that generate a comprehensive content audit report for any website up to 1000 pages, 100% customized to your brand's colors.\n\n### Set up instructions:\n1. Add a new credential \"Basic Auth\" by following this [guide](https://docs.n8n.io/integrations/builtin/credentials/httprequest/). You can get your DataForSEO API credentials [here](https://app.dataforseo.com/api-access). DataForSEO offer a free $1 credit when you register, which is plenty enough to test the workflow as the cost is about ~$0.20 per 500-page report. Finally, assign your Basic Auth account to the node \"Create Task\", \"Check Task Status\", \"Get Raw Audit Data\" and \"Get Source URLs Data\".\n2. Add a new credential \"Google OAuth2 API\" by following this [guide](https://docs.n8n.io/integrations/builtin/credentials/google/oauth-generic/). Assign your Google OAuth2 account to the node \"Query GSC API\".\n3. Update the \"Set Fields\" node with the following information:\n- dfs_domain: The website domain you want to crawl.\n- company_name: Your company name (Will be displayed on the final report)\n- company_website: Your company website URL (Will be displayed on the final report)\n- company_logo_url: Your company logo URL (Will be displayed on the final report)\n- brand_primary_color: Your primary brand color. (Will be used to customize the final report to your brand's colors)\n- brand_secondary_color: Your secondary brand color. (Will be used to customize the final report to your brand's colors)\n- gsc_property_type: Set to \"domain\" or \"url\" depending of the property type set in your Google Search Console account for the target website (dfs_domain).\n4. Start the workflow. Once done, download the HTML file in the last node \"Download Report\". \n\nVoilà! You have a comprehensive content audit report ready to be sent to your client via email, customized to your own branding.\n\n**Note**: The workflow take approximately 20 minutes to run for ~500 pages. If you want to customize this workflow for your own need, feel free to [contact us](https://customworkflows.ai/work-with-us)."},"typeVersion":1},{"id":"afd6a0aa-813c-4a3f-b844-ac1cf9f854c6","name":"Download Report","type":"n8n-nodes-base.convertToFile","position":[2500,320],"parameters":{"options":{"fileName":"={{ $('Set Fields').first().json.dfs_domain }}-content-audit-{{ new Date().toLocaleString('en-US', { month: 'long' }) + '-' + new Date().getFullYear() }}.html"},"operation":"toText","sourceProperty":"html","binaryPropertyName":"=content audit report"},"typeVersion":1.1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"c6db2f12-2e4f-4f40-acf9-6664c9feb45e","connections":{"If":{"main":[[{"node":"Get RAW Audit Data","type":"main","index":0}],[{"node":"Wait","type":"main","index":0}]]},"Wait":{"main":[[{"node":"Check Task Status","type":"main","index":0}]]},"Wait1":{"main":[[{"node":"Map GSC Data to URL","type":"main","index":0}]]},"Set Fields":{"main":[[{"node":"Create Task","type":"main","index":0}]]},"Create Task":{"main":[[{"node":"Check Task Status","type":"main","index":0}]]},"Extract URLs":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Map URLs Data":{"main":[[{"node":"Loop Over Items1","type":"main","index":0}]]},"Query GSC API":{"main":[[{"node":"Wait1","type":"main","index":0}]]},"Loop Over Items":{"main":[[{"node":"Merge GSC Data with RAW Data","type":"main","index":0}],[{"node":"Query GSC API","type":"main","index":0}]]},"Loop Over Items1":{"main":[[{"node":"Build Report Structure","type":"main","index":0}],[{"node":"Get Source URLs Data","type":"main","index":0}]]},"Check Task Status":{"main":[[{"node":"If","type":"main","index":0}]]},"Extract 404 & 301":{"main":[[{"node":"Loop Over Items1","type":"main","index":0}]]},"Get RAW Audit Data":{"main":[[{"node":"Extract URLs","type":"main","index":0}]]},"Map GSC Data to URL":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Generate HTML Report":{"main":[[{"node":"Download Report","type":"main","index":0}]]},"Get Source URLs Data":{"main":[[{"node":"Map URLs Data","type":"main","index":0}]]},"Build Report Structure":{"main":[[{"node":"Generate HTML Report","type":"main","index":0}]]},"When clicking ‘Start’":{"main":[[{"node":"Set Fields","type":"main","index":0}]]},"Merge GSC Data with RAW Data":{"main":[[{"node":"Extract 404 & 301","type":"main","index":0}]]}}}