kogan.com

Marketplace Promotions

Plan promos · Invite sellers · Collect submissions
PROTOTYPE · v0.3
Closed Submission deadline
Open MKTP Calendar

Click a promo on the calendar

Select any promo block to see details, invite sellers, track submissions, and view rules.

This panel simulates what the seller sees when they click their invite link.
https://promos.kogan.com/s/…

Bulk Invite

Invite multiple sellers to multiple promotions in one go. Tick the sellers on the left, tick every promo they should be invited to, then send — each seller receives one personalised email listing every ticked promo.
1. Sending as
Replies will route back to this CM's Gmail.
Send on behalf of… (optional)
If you're covering for another CM, pick their name — the invite is credited to them, their sellers appear on the right, and BOTH of you get pinged when the seller submits.
2. Pick sellers
3. Pick the promos
Kogan / Dick Smith MightyApe All stores Unspecified
Status = whether the submission deadline has passed. Closed promos stay visible but can't be ticked.
4. Send
Pick a seller and at least one promo to enable Send.

Submissions

Pick a promo to see who's submitted. Download each seller's file to check their SKUs before submitting to Marketing.

Seller submission form (preview)

The form sellers fill in after clicking the invite link. Preview here to make sure the schema, validation, and copy look right before you send invites.

Promotions (click to expand the full promo list)

Add new promotions, edit dates and rules, or retire old ones. Click a promo name to jump to its calendar detail.

Seller invitation email template (click to expand the editor)

This is the email sellers receive when you click Send via Gmail. Use the variables on the right (e.g. {{promoName}}) — they're automatically replaced with the promo's details when the invite goes out.
Changes persist for this session. In production these save to the master sheet so every CM uses the same template (or you can fork per-category).

Public seller form URL

The URL where this dashboard is hosted for sellers to access (Cloudflare Pages). The invite email's Submit link gets built as {thisURL}?promo={promoId}. Sellers click, land on the form, pick their store, and submit.

Your Gmail address

Used so "Send via Gmail" opens compose in YOUR Kogan Gmail inbox (not someone else's). Save your Kogan email once — it stays in this browser.

Your personal Apps Script URL (optional — sends invites from YOUR Gmail)

By default, invite emails are sent through the shared script (Elizabeth's). If you deploy your own copy of the Apps Script under your @kogan.com.au account and paste the URL here, your invites will instead be sent from your own Gmail — they'll appear in your Sent folder and count against your own quota.

Setup takes ~10 min. Ask Elizabeth for the Kogan MKTP Promos — CM Setup Guide if you don't have it. Leave this blank and everything still works through the shared script.

Backend sync · Apps Script endpoint

When a seller submits SKUs through the dashboard, they're POSTed to a Google Apps Script Web App that appends them to the Marketplace Promotions SKU Submissions sheet — one tab per promotion, matching the 15-column standard layout. See apps-script-Code.gs in your outputs folder for the server code and deploy instructions.

CSV / Excel column headings

When a seller uploads a submission file, these are the columns it must contain. Add aliases to accept alternative headings (e.g. a seller's spreadsheet might call it "Product Code" instead of "SKU"). Changes apply immediately to the seller submission form.

CM Team (live from Zoho)

The "Sending as CM" dropdown on every promo is populated directly from the distinct values of Category_Manager on the Zoho Deals module (each seller's active deal record), resolved against the Users module for full names. No list to maintain here — if you want someone added, assign them to a seller's deal in Zoho and they'll appear on next refresh. If a CM leaves and their deals are reassigned, they drop off automatically.
Currently assigned in Zoho
When a CM sends invites, each seller is stamped with their own Zoho CM (not the sender) — so the exports always show the accurate owner, even if someone covers for another CM. The sender's identity is tracked separately as InviteSentBy in the export for audit.

Seller directory (live from Zoho CRM)

The seller list on the invite panel is a live pull from your Kogan Zoho CRM Sellers module. It's not a static snapshot — every time you open the tool (or click Refresh) it re-queries Zoho for all records where Status = Active / Onboarded.
How the fluidity works
New sellers onboarded in Zoho → appear automatically on the next refresh (usually next time you open the tool).
Offboarded sellers (Status changed to Terminated, Paused, or Churned in Zoho) → dropped from the list automatically, so you can't accidentally invite them.
Updated contact details in Zoho (email, account manager, category) → pulled through on next refresh.
Uninvitable sellers (missing email, on legal hold, etc.) → Zoho flags them and the tool greys them out.
Current state: showing live sellers from Zoho · last sync: just now
Prototype note: the live sellers loaded in this build are the actual 102 active sellers from your Zoho CRM at the time of snapshot. In production the Zoho MCP integration re-fetches on every session open, so the list is always current without any manual sync.

Yes — this is all possible. Here's how the flow wires up end-to-end.

The prototype already does the full CM-side flow: pick a promo, tick the sellers you want, click send. In production the same UI drives three pieces of automation — Gmail outbound, a tokenised seller form, and a Google Sheet that becomes the single source of truth. The current build uses mailto: (which opens a pre-filled Gmail compose window in your browser) so you can test the pattern today without IT involvement. The arrows below show the production version.

Step 1 — CM

Pick promo & sellers

  • Click a promo bar on the calendar
  • Tick sellers to invite (duplicate-blocked automatically)
  • Click Send via Gmail
Step 2 — Gmail

Invites go out

  • Today (prototype): opens Gmail compose pre-filled with BCC recipients, subject, body, tokenised form link
  • Production: uses Gmail API / Apps Script to send directly from your account, logs sent timestamp against each seller
  • Chase-up emails fire automatically 48h before submission deadline for non-responders
Step 3 — Seller

Fill tokenised form

  • Unique per-seller link (see Seller view tab)
  • No login required — token pre-fills their seller record
  • Real-time validation as they enter each SKU
  • Only valid rows can submit
Step 4 — Sync

Feeds back into this dashboard + Google Sheet

  • Submission posts to a Google Apps Script web-app endpoint
  • Rows appended to your existing shared Google Sheet (one tab per promo)
  • This dashboard's Status view updates live — you see who's submitted, who's still outstanding
  • One source of truth — no more copy-paste

What "linked to Gmail" means — two options

Option A · mailto: (works right now, no IT required). Clicking "Send via Gmail" opens Gmail compose in your browser with the recipients, subject and body already filled in. You click send. Fine for small batches (<50 recipients) — Gmail caps the BCC line length, so we split into batches if needed. This is what the current prototype does.

Option B · Gmail API via Apps Script (full automation). A ~50-line Google Apps Script deployed as a web app, authorised against your Kogan Google account. This dashboard POSTs the recipient list + promo details to the Apps Script, which sends each invitation personalised (not BCC'd), logs delivery, and writes the invite record to your sheet. Setup takes about half a day. No external infrastructure — runs entirely inside Google.

What "linked to a Google Sheet we have hosted" means

You already have a master promo sheet. We add two tiny pieces of plumbing:

  1. On the sheet — a Google Apps Script bound to the sheet with a doPost(e) handler. It receives JSON (promo id, seller id, SKU rows) and appends to the right tab. ~30 lines of code.
  2. On the seller form — when the seller clicks "Submit", the form fetches the Apps Script URL with the payload. Cross-origin is fine because Apps Script web apps accept public POSTs when deployed as "Anyone".

The same Apps Script also exposes a doGet(e) returning current submission status, which is what this dashboard polls every 60s to update the Status view. The sheet stays your system of record — the dashboard is just a nicer view over it.

What to do next

  • Week 1: Use the prototype as-is — it works today with mailto:. Pilot with 5–10 sellers on one upcoming promo.
  • Week 2: Ask IT or a dev for ~1 day to wire up the Apps Script (Gmail API + sheet sync). This flips it from prototype to automated.
  • Week 3+: Roll out to the rest of the CM team. Every CM gets the same calendar, each seller can only be invited once per promo across the team.