Богдан
AI Automation Specialist
- Розглядає посади:
- AI Automation Specialist, спеціаліст з маркетингу
- Місто проживання:
- Черкаси
- Готовий працювати:
- Дистанційно
Контактна інформація
Прізвище, контакти та світлина доступні тільки для зареєстрованих роботодавців. Щоб отримати доступ до особистих даних кандидатів, увійдіть як роботодавець або зареєструйтеся.
Отримати контакти цього кандидата можна на сторінці https://www.work.ua/resumes/20606770/
Завантажений файл
Файл містить ще 10 сторінок
Версія для швидкого переглядуЦе резюме розміщено у вигляді файлу. Ця версія для швидкого перегляду може бути гіршою за оригінал резюме.
Bohdan Zaviriukha
AI Automation Specialist
n8n · AI workflows · SEO automation · Claude Code
Cherkasy, Ukraine (open to remote work) · [
@user34562622
About
AI Automation Specialist with 3 years of experience building n8n workflows for SEO. I
automate the full content pipeline: keyword research, SERP and competitor analysis, AI-
written articles, image selection and publishing to WordPress. My goal is simple: take
repetitive SEO work off the team's plate so they can focus on strategy.
Experience
SEO & AI Automation Specialist — Seorun
December 2023 – Present · Remote
Built n8n workflows that generate SEO articles with target keywords using the OpenAI
API and Claude
Automated SERP research and competitor analysis to shape article structure and
topics
Set up automatic publishing of articles to WordPress via API
Automated image selection by topic and upload of images into articles
Built automatic internal linking by topic clusters for both Classic Editor and Elementor
pages
Connected Google Sheets, Google APIs and Ahrefs data into end-to-end content
pipelines
Skills
Automation: n8n, Claude Code, REST APIs, webhooks, JavaScript (Code nodes),
Google Apps Script
AI / LLM: ChatGPT, Claude, OpenAI API (GPT-4.1, GPT-5.4), AI agents with tools and
structured output, AI vision image filtering, prompt engineering
SEO tools & data: Ahrefs, Frase API (SERP analysis), Apify (web scraping)
Page 1 of 14
Bohdan Zaviriukha — CV & Portfolio
WordPress: REST API (Posts & Media), Gutenberg blocks, Yoast SEO fields, Classic
Editor, Elementor, Shopify API
Google Workspace: Google Sheets, Docs and Drive APIs
Image SEO: WebP conversion, SEO file names, alt text, featured images
SEO: keyword research and clustering, SEO article structure, content optimization,
internal linking, FAQ schema (JSON-LD)
Training
n8n workflow automation course (company-sponsored training)
Education
Cherkasy Medical Academy — Pharmacy, 2018–2020
Languages
Ukrainian — native
English — intermediate (B1)
Portfolio
Overall result: together, these workflows raised content output from 20 articles per day
(one person, manually) to 100–200 articles per day, and saved about a week of article-
writing work.
1. AI Article Generator
Task: produce SEO-optimized articles at scale from a list of topics, ready for publishing.
How it works:
Page 2 of 14
Bohdan Zaviriukha — CV & Portfolio
1. Reads the article topic, anchors, geo and brand name from Google Sheets and loops
over each row.
2. A Frase AI agent (OpenAI chat model + Frase SERP API) analyzes top-ranking
competitor articles and returns headings, keywords and FAQ as structured output.
3. A niche-specific prompt (a separate one for each topic, e.g. travel) writes the full
article from that brief.
4. The article is sent to Google Docs through a Google Apps Script web app that formats
the text.
Tools: n8n, OpenAI API, Frase API, Google Sheets, Google Apps Script, Google Docs
Result: capacity of 100+ articles per day. Running batches of 10–20 keeps quality high and
prevents AI hallucinations.
2. WordPress Auto-Publisher
Task: turn finished articles from Google Docs into SEO-ready WordPress drafts in bulk,
with formatting, keyword highlighting, FAQ schema and Yoast fields filled automatically.
How it works, node by node:
Trigger and data
1. When clicking 'Execute workflow': manual start.
2. Get row(s) in sheet: reads the task table. Each row is one job: job_id , a link to the
Google Doc with the article, the site URL, and the WordPress login and app password.
3. Loop Over Items: processes rows one by one, so each article goes through the full
cycle separately.
Getting and cleaning the text
Page 3 of 14
Bohdan Zaviriukha — CV & Portfolio
4. Get a document (Google Docs): loads the document from the link in full format, with
its structure.
5. clean text (Code): extracts clean text from the Google Docs JSON. Paragraphs are
joined with blank lines; tables become tab-separated rows so the model can rebuild
them as HTML tables. Site data and the document title are passed along.
AI formatting
6. Message a model (OpenAI, GPT-5.4) converts the text into clean HTML for WordPress.
Prompt rules:
the text is kept 1:1, with no rewriting;
only h1–h3 , p , lists, tables and strong are allowed;
3–5 key phrases per paragraph are highlighted with <strong> , each phrase only
once per page;
the FAQ is formatted as an h2 + h3 questions + p answers;
FAQ schema (JSON-LD) and "SEO Title" and "Meta Description" paragraphs are
added at the end.
Preparing WordPress fields
7. Code in JavaScript: finds the FAQ section, builds FAQPage schema from the questions
and answers, and wraps it in a Gutenberg wp:html block.
8. Prepare WordPress Fields (Code) splits the model's HTML into fields:
takes title from the <h1> ;
takes seo_title and meta_description from the service paragraphs, then
removes those paragraphs from the text;
moves the schema into a separate block at the very end of the article;
generates the slug from the title and the focus_keyphrase from the SEO title.
9. Edit Fields: collects everything needed for publishing into one object: job_id , site,
credentials and the prepared SEO fields.
10. Build WP Auth (Code): builds the Basic Auth header for the REST API from the login
and app password.
11. guttenberg wrap (Code): wraps every heading, paragraph, list and table in Gutenberg
block comments, so the article opens in the editor as proper blocks instead of one
Classic block.
Publishing and reporting
12. WP Post (HTTP Request): sends a POST to /wp-json/wp/v2/posts and creates a draft
with the title, slug, content, plus the Yoast SEO title, meta description and focus
keyphrase.
Page 4 of 14
Bohdan Zaviriukha — CV & Portfolio
13. Edit Fields1: takes the post ID and link from the WordPress response.
14. Update row in sheet1: writes the post ID and URL back to the table by job_id , then
returns to Loop Over Items for the next row.
Tools: n8n, OpenAI API (GPT-5.4), Google Docs API, Google Sheets, WordPress REST API,
Yoast SEO, Gutenberg, JavaScript
3. Google Drive Image Batch Organizer
Task: prepare images for bulk SEO article posting, where each article needs a fixed
number of photos. The workflow takes all images from a Google Drive folder and copies
them into new numbered subfolders in fixed batches (e.g. 8 photos per folder).
How it works, node by node:
Step 1: Configure and find images
1. When clicking 'Execute workflow': manual start.
2. Config – Set Your Folders & Batch Size (Edit Fields): one place for all settings:
sourceFolderName : the folder the images are taken from;
destinationParentFolderId : the folder where the new batches are stored;
batchNamePrefix : the prefix for new folder names;
batchSize : the number of images per batch.
3. Find Source Folder (Google Drive): finds the source folder by name.
4. Get Images In Source Folder (Google Drive): lists all images inside it.
Step 2: Split into batches
5. Split Images Into Batches (Code): groups the images into fixed-size batches. Only
complete batches are kept; leftover images that cannot fill a full batch are skipped.
Step 3: Create folders and copy files
Page 5 of 14
Bohdan Zaviriukha — CV & Portfolio
6. Loop Over Items: processes the batches one by one.
7. Create Batch Folder (Google Drive): creates a numbered folder for the current batch
in the destination folder.
8. Prepare Files For Current Folder (Code): matches the batch's images with the new
folder ID.
9. Copy Image To Batch Folder (Google Drive): copies each image into the folder, then
returns to the loop for the next batch.
Tools: n8n, Google Drive API (OAuth2), JavaScript
4. AI Image Finder with Vision Filter
Task: find and curate topic-relevant visual content for beauty SEO articles. The workflow
collects photos by hashtag, filters them with AI vision against strict quality rules, and
saves only suitable images to Google Drive.
How it works, node by node:
Collecting images
1. When clicking 'Execute workflow': manual start.
2. hashtag (Edit Fields): sets the search hashtag (e.g. eyebrowtattoo ).
3. Run an Actor and get dataset (Apify, Instagram Scraper): collects up to 1,000 posts for
the hashtag.
4. Extract Raw Image URLs (Code): pulls every image URL from each post, including
carousel images, removes duplicates and keeps the post metadata (caption, author,
likes, comments).
5. Edit Fields: keeps only the image URL for processing.
Page 6 of 14
Bohdan Zaviriukha — CV & Portfolio
AI vision filter
6. Loop Over Items: processes images in batches of 100.
7. eyebrow (HTTP Request → OpenAI Responses API, gpt-4.1-mini vision) reviews
each image with a detailed prompt:
approves images focused on the treatment area (brows, lashes, lips, skin),
preferably close-ups;
rejects full-face portraits, selfies, collages, blurry photos and any watermarks,
logos, usernames or text;
uses medium strictness for brows: partial face is fine if the brows stay in focus;
returns JSON with the decision, a description and the reason.
8. Parse Visual Filter JSON (Code): safely parses the model's answer, cleans code
fences, falls back to regex for broken JSON and defaults to reject on errors.
9. Keep Only Keep Images (Code): passes on only approved images.
Saving
10. Download1 (HTTP Request): downloads the image file.
11. Upload file (Google Drive): saves it to the topic folder, then returns to the loop for the
next batch.
Tools: n8n, Apify, OpenAI API (GPT-4.1 mini Vision), Google Drive, JavaScript
5. WordPress Image SEO & Auto-Insert
Task: add SEO-optimized images to published WordPress drafts automatically. The
workflow takes photos from a Google Drive folder, generates unique AI keyphrases for
them, converts them to WebP, uploads them with SEO file names and alt text, and places
them evenly through the article. It continues the WordPress Auto-Publisher pipeline
(project 2).
Page 7 of 14
Bohdan Zaviriukha — CV & Portfolio
How it works, node by node:
Article data
1. When clicking 'Execute workflow': manual start.
2. Get row(s) in sheet: reads the same task table as the Auto-Publisher: WordPress post
ID, Google Doc link, Drive folder with photos and credentials.
3. Loop Over Items: processes articles one by one.
4. Get a document (Google Docs): loads the article text.
5. Build Article Payload (Edit Fields): collects the site, post ID, text, Drive folder and
credentials into one object. From here the workflow splits into two parallel branches.
Branch A: SEO keyphrases for images
6. AI keyphrase2 (OpenAI, gpt-4.1-mini ) generates 20 unique image keyphrases from
the article text:
each phrase describes a different visual scenario: before/after, close-up, tools,
procedure, healing, studio and more;
an anti-cannibalization rule ensures no procedure is repeated;
phrases are 3–6 words, lowercase, written like real search queries, returned as
JSON.
Branch B: preparing images
7. Extract Folder ID (Code): gets the folder ID from the Drive link or uses it directly.
8. Search Images In Drive Folder (Google Drive): finds all images in the folder.
9. Download file (Google Drive): downloads each photo.
10. Edit Image1: resizes to 2200×2200.
11. Edit Image: crops to 2100×2100 and converts to WebP.
Page 8 of 14
Bohdan Zaviriukha — CV & Portfolio
Renaming and uploading to WordPress
12. Merge5 (Combine All): pairs the keyphrases with each photo.
13. Rename Binary2 (Code) assigns each photo its own keyphrase and builds:
an SEO file name, e.g. eyebrow-healing-stages-close-up.webp ;
alt text and title from the same phrase.
14. Upload Image to WP2 (HTTP Request): uploads the file to the media library via /wp-
json/wp/v2/media .
15. Merge4 (by position): matches the WordPress response (media ID) with the prepared
alt text and title.
16. Update Image Meta2 (HTTP Request): saves the alt text and title for each image.
Inserting into the article
17. Get Post to wp4 (HTTP Request): gets the raw post content ( context=edit ).
18. Insert Multiple Images Into Post3 (Code):
temporarily sets aside the FAQ schema and shortcodes so nothing breaks;
makes the first image the featured image;
removes old images under H2 headings, so re-runs never duplicate images;
spreads the remaining images evenly under H2 headings before the FAQ section;
converts everything to Gutenberg blocks and restores the schema.
19. Update Post2 (HTTP Request): saves the new content and featured image, then
returns to the loop for the next article.
Tools: n8n, OpenAI API (GPT-4.1 mini), Google Docs, Google Drive, Google Sheets, n8n Edit
Image (WebP), WordPress REST API (Posts & Media), Gutenberg, JavaScript
6. AI Internal Linking
Task: add internal links to WordPress articles at scale. For each anchor and target URL, AI
picks the most relevant paragraph and the link is placed naturally: either by wrapping a
phrase that already exists or by a light rewrite of the paragraph.
How it works, node by node:
Data and post
1. When clicking 'Execute workflow': manual start.
Page 9 of 14
Bohdan Zaviriukha — CV & Portfolio
2. Get row(s) in sheet: reads the linking table. Each row is one link: site, post ID, anchor,
target URL and credentials.
3. Loop Over Items: processes links one by one.
4. Get Post to wp (HTTP Request): gets the raw post content ( context=edit ).
Preparing paragraphs
5. Extract Gutenberg Paragraph Blocks (Code) extracts and numbers all Gutenberg
paragraph blocks, skipping:
short paragraphs under 80 characters;
paragraphs that already contain a link, so no paragraph gets two links.
6. Filter Linkable Paragraphs (Code): keeps the 2nd–5th paragraphs; the intro paragraph
is always skipped.
AI paragraph choice
7. Message a model (OpenAI, gpt-4o ) picks the single best paragraph for the anchor:
no intro, FAQ or generic text;
the paragraph must match the anchor's service, problem or search intent;
it checks whether the exact anchor phrase already exists in the text
( anchor_exists ).
8. Parse AI Paragraph Choice (Code): parses the JSON with the paragraph number and
the anchor_exists flag.
9. If: splits the logic into two branches.
Branch: the anchor already exists
10. Link Existing Anchor (Code): finds the phrase in the HTML even when tags such as
<strong> sit between the words, and wraps it in <a href> . The article text is not
changed.
Branch: the anchor is missing
11. Prepare Selected Paragraph (Code): takes the HTML of the chosen paragraph.
12. Message a model1 (OpenAI, gpt-4o ): lightly rewrites the paragraph, adding a short
phrase or sentence with the exact anchor and link. Facts stay unchanged; only one link
is added.
13. Parse AI Insert Output (Code): parses the updated paragraph.
14. Replace Paragraph In Article (Code): swaps the old block for the new one in the full
article HTML.
Saving
Page 10 of 14
Bohdan Zaviriukha — CV & Portfolio
15. HTTP Request: saves the updated post content via the REST API, then returns to the
loop for the next link.
Tools: n8n, OpenAI API (GPT-4o), Google Sheets, WordPress REST API, Gutenberg,
JavaScript (regex HTML parsing)
7. WordPress Posts Index & AI Topic Clustering
Task: build a searchable index of all articles across client WordPress sites and group them
into topic clusters with AI. The index is the basis for cluster-based internal linking: articles
from the same cluster link to each other.
How it works, node by node:
Sites and access
1. When clicking 'Execute workflow': manual start.
2. Get row(s) in sheet: reads the list of sites with their WordPress credentials.
3. Loop Over Items: processes sites one by one.
4. Prepare Auth (Code): builds the Basic Auth token and the REST API URL for the site's
posts, including categories ( _embed ).
Collecting posts
5. HTTP Request: gets the site's posts via /wp-json/wp/v2/posts (up to 100 per
request).
6. Normalize Posts (Code): turns each post into a clean record: post ID, title, URL, slug
and category ID, name and slug.
AI clustering
7. Batch (Code): gathers all slugs of the site into one list, so the model classifies them in a
single request.
8. Message a model (OpenAI, gpt-4o-mini ): assigns each slug to one of 45 predefined
topic clusters across three niches (travel destinations, cosmetic tattoo, exterior
cleaning services); unclear posts go to needs-review .
Page 11 of 14
Bohdan Zaviriukha — CV & Portfolio
9. Parsing (Code): parses the JSON, matches clusters back to posts by slug and marks
any post the model missed as needs-review .
Saving
10. Append row in sheet (Google Sheets): writes each post with its category and topic
cluster to the Posts_Index table, then returns to the loop for the next site.
Tools: n8n, WordPress REST API, OpenAI API (GPT-4o mini), Google Sheets, JavaScript
8. AI Internal Linking for Elementor
Task: add contextual internal links inside Elementor pages across client sites. The
workflow edits Elementor's own JSON structure ( _elementor_data ) directly. AI first
decides which articles from the same topic cluster deserve a link, then finds a natural
phrase that already exists in the text for each one. It builds on the posts index and topic
clusters from project 7.
How it works, node by node:
Index and candidates
1. When clicking 'Execute workflow': manual start.
2. Get row(s) in sheet1: reads the client sites posts index with topic clusters and linking
settings ( linking_priority , linking_status ).
3. Build Category Candidates1 (Code): for each post, collects candidate articles from the
same site and topic cluster.
4. Loop Over Items1: processes posts one by one.
5. Wait3: a 2-second pause to avoid overloading the site.
6. Prepare Auth For Current Post1 (Code): rebuilds candidates with filters (no self-links,
no ignore or skip pages) and generates a base anchor from each slug with proper
city and term capitalization.
Parsing Elementor
7. HTTP Request2: gets the post with context=edit , with automatic retries.
8. Finding candidates2 (Code): parses _elementor_data and walks the full tree of
sections, columns and widgets recursively. It collects every Text Editor widget: ID,
HTML, plain text and whether it already has links. The first (intro) widget is skipped.
AI step 1: choosing articles to link
Page 12 of 14
Bohdan Zaviriukha — CV & Portfolio
9. збір статтей1 (OpenAI, gpt-4.1 ) reads the full article text and selects up to 8
candidates:
only articles whose topic is actually discussed in the text, not just in the same
cluster;
quality over quantity: 2 precise links beat 8 forced ones;
a broad-match anchor hint for each link, using synonyms instead of the exact
keyword.
10. Parse Selected Links1 (Code): splits the selected links into separate items, one per
link.
11. Prepare GPT Input1 (Code): trims widget data to what the model needs, to save
tokens.
AI step 2: choosing the phrase in a widget
12. перелінковка1 (OpenAI, gpt-4.1 ) finds, for each link, a 2–5 word phrase that
already exists in a widget:
the "real test": a reader seeing only the phrase should guess the target page's topic;
no generic phrases, city names, source names, "click here" or phrases that are
already links;
avoids FAQ, CTA and the first widget;
if no good phrase exists, the link is skipped.
13. Finding candidates3 (Code): parses the answer: widget, phrase, URL and status.
14. Insert Link Into Widget1 (Code) validates every link: the widget exists, the URL is not
already there, the phrase is found and not inside another <a> . Only then is the phrase
wrapped in a link.
Saving and reporting
15. Aggregate1: collects the results for all links of the post.
16. Apply All Inserted Links To Elementor Data1 (Code): walks the whole Elementor tree
again and applies all confirmed links to the right widgets in sequence, counting applied
and skipped links.
17. Wait4: a 3-second pause.
18. HTTP Request3: saves the updated _elementor_data via the REST API and clears
_elementor_css , so Elementor regenerates the styles.
19. Aggregate For Sheet (Code): builds the post report: number of links, anchors and
URLs, date and done / skipped status.
20. Update row in sheet1: writes the report to the table by post_id , then returns to the
loop for the next post.
Page 13 of 14
Bohdan Zaviriukha — CV & Portfolio
Tools: n8n, OpenAI API (GPT-4.1), WordPress REST API, Elementor data structure
( _elementor_data ), Google Sheets, JavaScript (recursive JSON tree parsing, regex)
Page 14 of 14
Інші резюме цього кандидата
75 000 грн
Дистанційно
Повна зайнятість, неповна зайнятість
- SEO-спеціаліст, SEOrun, 1 рік 11 місяців
Схожі кандидати
-
AI Social Media Content, Creative AI Specialist (fashion, video, product, photography, beauty, advertising)
Дистанційно -
AI Automation Specialist
62000 грн, Дистанційно, Київ -
AI Automation Specialist
Дистанційно -
CRM Automation Specialist
Дистанційно -
Automation Specialist, Process Owner (AI)
Дистанційно -
AI Automation Specialist (No-code, AI Automator)
35000 грн, Дистанційно, Львів