zpoint/vibe-seller/noon-ads

Claude Code and agent skill by zpoint/vibe-seller

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Noon Ad Manager — campaigns (Auto / Manual / Brand), tuning audits, keyword research, negatives, Vantage analytics. Covers Targets / Customer Queries / Export Data flows. Load for any noon ads work — review, audit, tune, create. References under references/ for the tuning playbook (ads-tuning.md), creation guide (ads-creation.md), and keyword research (ads-keyword-research.md).

Install

npx vskill@latest install zpoint/vibe-seller/noon-ads

SKILL.md

Noon — Ad Manager

PREREQUISITE: Read ../noon-shared/SKILL.md for login, page
structure, and common patterns.

Mechanics for noon Ad Manager. The actual thinking — when to create / tune / kill a campaign, how to research keywords — lives in the three reference files (see § 11).

URL: https://admanager.noon.partners/en-{cc}/home?mpCode=noon&project=PRJ{project_id}

Left nav (ul role=menu): Campaigns, Budget, Billing, Vantage (Beta), Settings. Country switcher at bottom.

1. Campaigns Overview Metrics

Top-level KPI cards:

MetricFormula / Notes
ROASReturn on Ad Spend = Revenue / Spends
RevenueTotal ad-attributed revenue
SpendsTotal ad spend
eCPCEffective Cost Per Click
CTRClick-Through Rate = Clicks / Views
OrdersAd-attributed orders
ClicksTotal clicks on ads
ViewsTotal ad impressions
ATCAdd To Cart count
CvRConversion Rate (shown on campaign detail)

A time-series performance chart below lets you toggle any metric.

2. Campaign List Filters

  • Status (Active/Paused/etc.)
  • Ad Type
  • Date range

Columns: Performance (chart), ROAS, Revenue, Spends, eCPC, CTR, Orders, Campaign Details, Status, Budget.

3. Campaign Detail Page

URL: admanager.noon.partners/en-{cc}/campaign/details/{campaign_id}?mpCode=noon&project=PRJ{project_id}

Campaign ID format: C_{alphanumeric} (10 alphanumerics after the underscore, e.g. C_XXXXXXXXXX).

Campaign ID extraction from the campaigns list (IDs are in <a href> attributes, not visible text):

bash
browser-use eval "var links = document.querySelectorAll('a[href*=\"/campaign/details/\"]'); var data = []; links.forEach(function(l) { var m = l.href.match(/\/campaign\/details\/([^?]+)/); if (m) data.push({name: l.textContent.trim(), id: m[1]}); }); JSON.stringify(data);"
⚠️ **The campaign list is PAGINATED (~15 per page) — that eval only
returns the CURRENT page.** The footer reads `Showing 15 items per
page and a pager (1 2 3 4 5 →`) sits bottom-right. A single eval
captures ~15 campaigns; an account with 70 campaigns across 5 pages
will be silently under-reported by ~80% if you stop at page 1. This
has produced a real audit that reported "12 active campaigns (all
manual targeting)" for a noon account that actually had **~70
campaigns across 5 pages, including Auto-targeting and Product-Ad
campaigns** the page-1-only read never saw.
**Phase 1 (Discover) MUST enumerate every page before concluding the
campaign set:**
1. Read the pager to learn the last page number, then **page through
all of them**, unioning campaign IDs into one set. The pager is an
Ant Design component — click the explicit page-number anchor
li.ant-pagination-item-N a (verified reliable 2026-06-08); the
generic next-chevron snippet below is an unreliable fallback (the
/next|›|→/ match returns no-next on this paginator):
```bash
# RELIABLE: jump to each page by its number, 1..last
browser-use eval "var a=document.querySelector('li.ant-pagination-item-2 a'); if(a){a.click(); 'page-2';} else 'no-page-2';"
# how many pages exist:
browser-use eval "JSON.stringify([...document.querySelectorAll('li.ant-pagination-item')].map(function(li){return li.getAttribute('title')||li.textContent.trim();}));"
# fallback chevron (often fails on Ant Design — prefer the anchor):
# browser-use eval "var b=[...document.querySelectorAll('button,a,[role=button]')].find(function(e){return /next|›|→|>/.test(e.getAttribute('aria-label')||e.textContent||'') && !e.disabled;}); if(b){b.click(); 'clicked-next';} else 'no-next';"
```
Re-extract a[href*="/campaign/details/"] after each page and
merge into a de-duped set (IDs repeat if you re-read the same page).
2. Establish the true total before trusting any count: the last
pager number × page-size (minus the short last page) is your
completeness target. If the distinct campaign-id count you
collected is less than (last_page − 1) × 15, you have NOT read
every page — keep going. Many noon list footers also expose a
page-size selector; bumping it (e.g. 15 → 100) collapses the
account to a single page and is the most reliable read when
available.
3. Only after the union is complete (count stable, all pages visited)
do you have the manifest. Treat a single-page read as a spot-check,
never as the full campaign set. The same caveat applies per
country — re-paginate after every country switch.

Campaign names can be misleading. Verify actual products via the Products tab — do not trust the campaign name. A campaign named "mouse004 Auto" may target keyboard SKUs, not a mouse.

Header shows: campaign name, Status badge, Budget, Top-of-Search boost (displayed as Top Slot: N% between Budget and Bidding Strategy for manual campaigns with TOS configured), Bidding Strategy, Running From date, Last Updated.

Brand Ads have different CTR/ROAS norms. Brand Video ads measure view-through differently — never compare CTR directly to Product Ads. A brand video CTR of 0.23% is not "weak" vs product ad peers at 1.7–6.7%. Compare Brand Ads only against other Brand Ads, or against the brand ad's own historical ROAS.

Brand Ad "Creative" row. The Products tab may show a "Creative" row (logo/video element) that accumulates clicks with zero attributed orders — noon can't attribute conversions to the creative. If Creative spend > 20% of campaign budget, flag it; calculate ROAS both with and without the Creative row for true product performance.

KPI cards (same 10 metrics as overview, scoped to this campaign).

Performance chart with metric toggles: ROAS, Revenue, Spends, eCPC, CTR, CvR, Orders, Clicks, Views, ATC.

4 Sub-tabs on campaign detail:

TabPurpose
ProductsSKUs in this campaign with per-SKU metrics
PlacementsAd placement performance
TargetsKeywords with match types and bids
Customer QueriesActual customer search terms

Sub-tab access patterns. Element indices for the 4 sub-tabs are not stable — they change between page loads. After scrolling down ~800px, the Products tab is reliably at a stable index in browser-use state output. For other tabs, look for the tab name in the state output and click the adjacent index. For brand video pages, scroll 1500px (roughly 2× standard) because the embedded video player pushes sub-tabs further down.

"No SKUs Found" on Products tab. If a campaign is Live and spending but Products shows "No SKUs found", the linked SKUs were deleted or delisted. The Auto system continues to spend but cannot attribute revenue. Check if some variants show "View Issues" vs "Buy Box Won" — even one broken variant can tank campaign ROAS.

4. Targets Tab — Keywords & Bidding

Goal: capture every row, including the 0-view tail (typos, sub-floor bids, idle keywords).

Default to scroll+eval. For typical Manual campaigns (15–30 keywords) the DOM accumulates all rows on initial render; a single eval walking document.querySelectorAll('table tr') returns the full table. Verified live 2026-05-05: campaigns with 24–25 keywords returned every row on first eval, no scrolling needed.

bash
browser-use eval 'JSON.stringify(Array.from(document.querySelectorAll("table tr")).map(r => Array.from(r.cells).map(c => c.innerText.trim())))'

If the captured count looks small (<10 rows on a 14d+ campaign that should have 15+), scroll the inner table container and re-eval — the DOM may still be virtualizing on a slow render.

Export Data → CSV is unreliable in this environment. Field- verified: clicking the Export Data button on a campaign-detail Targets tab produced no CSV in ~/.vibe-seller/downloads/<slug>/ within 10 s; the download monitor only catches bulk-sheet exports, not per-campaign tab exports. Use Export Data only as a last resort for campaigns with ≥ 50 keywords AND only after verifying a fresh file appears in the downloads dir.

Tab-activation gotcha. After browser-use click <targets-tab-idx>, verify by URL — location.href should include ?tab=targets. The aria-selected state can lag for a second after click and isn't a reliable activation signal.

Recommended-Bid cell suffix. The Recommended Bid column extracts as e.g. 0.75 0.60-0.90 Apply — the literal "Apply" button label is concatenated into the cell innerText. Strip the trailing Apply before formatting in the report.

Columns: Target (keyword text), Bid, eCPC, Recommended Bid, Verticals, Engagement (Views/Clicks/Orders/CTR/CvR), Status.

Match types observed: exact Match, phrase Match (and likely broad Match).

Per-keyword actions:

  • Bid input: edit target bid directly
  • Apply button: applies recommended bid
  • Status toggle: enable/disable the keyword

5. Change Target / Keyword Price

On the Targets tab, the Bid column is directly editable:

bash
browser-use state # find bid input for target row
browser-use input <bid-input> "2.50"
# Confirmation/save happens per-row

Or click "Apply" next to Recommended Bid to use noon's suggestion.

6. Customer Queries Tab

Same scroll+eval default as § 4 (Export Data is unreliable in this environment — see § 4 note).

bash
# After clicking the Customer Queries tab, verify activation by URL
browser-use eval 'location.href.includes("tab=customerQuery")'
# Then walk the table rows
browser-use eval 'JSON.stringify(Array.from(document.querySelectorAll("table tr")).map(r => Array.from(r.cells).map(c => c.innerText.trim())))'

Rendering delay. After clicking the Customer Queries tab, the first eval may return only an empty header row (no data). This is a rendering delay — the table is in the DOM but data hasn't populated. A second eval ~2 seconds later returns full data.

The on-screen state shows only the top spenders; the long-tail / 0-order queries where harvest, brand-negate, and waste decisions live are below the fold. The eval above pulls the full table on most campaigns; if you see fewer than ~15 rows on a 14d+ campaign, scroll the inner table container and re-eval.

Shows the actual search terms customers used that triggered your ads. Columns: Customer Query Term, Target, Match Type, Target Bid, eCPC, Spends, Verticals, Engagement.

Auto campaign query routing per-product. On Auto campaigns, the Customer Queries tab shows queries scoped to the product currently selected/highlighted in the Products tab — NOT the full campaign. If a campaign has 2+ products, switch the highlighted product to see each product's queries. Always check Customer Queries while each product is individually selected to capture all routes.

Auto campaigns: Customer Queries IS the tuning surface. Auto campaigns have no Targets tab, so the Customer Queries tab is where most of the actionable items live (brand-negates, wrong-category waste, harvest candidates). Allocate equal time on Customer Queries for Auto as you would on Targets for Manual — don't treat Auto sections as "lighter" just because the spec template doesn't show a Targets table.

Use this to discover high-performing queries (add as keywords) or low-performing queries (add as negatives).

7. Export Data

Both Targets tab and Customer Queries tab have Export Data button at top-right. Triggers CSV download of the current filtered view. Unreliable in this environment — see § 4 caveat. Prefer DOM eval extraction.

bash
browser-use state # find "Export data" button
browser-use click <export-data-btn> # downloads CSV (may not land)

Campaign detail also has Export Data for the Products tab.

8. Create Campaign Flow

URL: admanager.noon.partners/en-{cc}/campaign/start?mpCode=noon&project=PRJ{project_id}

Step 1/3 — Ad Type

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
112
Repository forks
27
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/zpoint/vibe-seller/noon-ads/badge)](https://verified-skill.com/skills/zpoint/vibe-seller/noon-ads)

Something wrong with this skill or its page? Tell us.