Shopify E-Commerce Finance Controller — P&L, ROAS & Cashflow for a 12-Store Dropshipping Group

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Full Time

SALARY

$3-10

HOURS PER WEEK

20

DATE UPDATED

May 21, 2026

JOB OVERVIEW

Summary
Shopify E-Commerce Finance Controller — Daily Store P&L, ROAS & Cashflow Reconciliation for a 12-Store Dropshipping Group (Proactive, Self-Directing)

Intro
We run a portfolio of around 12 Shopify dropshipping stores across two entities (Netherlands and US), scaling toward roughly €25M this year. We need someone who lives and breathes Shopify store economics — daily revenue, COGS, ad spend, ROAS, payment fees and refunds — and who can make every store's P&L tie out to the actual cash landing in our accounts. If you have run the numbers behind Shopify dropshipping stores before, this will feel familiar. If you have only done traditional bookkeeping, it will not.

About us
We operate a growing portfolio of Shopify dropshipping stores in fashion and home décor. We launch, scale and sell individual stores, so each one is run as a standalone business unit with its own daily P&L — and each one has to stay sale-ready, meaning a buyer can review clean store-level financials at any ---------- nt. Quiet months run €400K–500K; Black Friday peaks hit €1M–2M. We buy traffic primarily through Google Ads (and Pinterest on some stores), fulfil through a 3PL partner, and run a multi-provider payment stack.

What you'll do

Own the daily P&L for each Shopify store — either filling it directly or coordinating the tea ---------- mber(s) who do, while owning the accuracy either way. Each daily row tracks: Revenue, COGS, Google Adspend, Mediabuying fee, transaction/payment provider fee, refunds, and the resulting Profit, ROAS, Profit %, COGS % and CVR %

Pull supplier and fulfilment invoices from Slack daily and book accurate COGS per store (product + shipping + fulfilment, often combined on one invoice)

Reconcile daily ad spend pulled from the Google Ads and Pinterest accounts against what is logged in each store P&L, and against Shopify revenue and order counts

Track real payment provider fees and payout timing across Shopify Payments, multiple PayPal accounts, PayPal Hong Kong, WOP Payments, Ocean Payments and Airwallex — not estimates
Catch the leaks that distort dropshipping P&Ls: refunds processed through old/disconnected PayPal accounts, chargebacks and dispute fees, FX conversion costs (EUR/USD/HKD), and payout delays — and make the internal P&L reconcile to actual bank cash
Build and own weekly, monthly and quarterly reporting per store and per entity

Evolve our current daily P&L template into a complete, sale-ready store-level reporting standard
Coordinate the existing operational finance team (payments processing and invoice control)

What we're looking for

Hands-on experience running or controlling the financials of Shopify (or comparable DTC) e-commerce stores — this is a hard requirement

You understand store-level unit economics: ROAS, AOV, CVR, COGS %, blended margin, and how ad spend, refunds and payment fees move the real profit number

Comfortable pulling and reconciling data from Shopify, Google Ads, and multiple payment providers in multiple currencies
Strong reconciliation discipline — you know why reported profit and bank cash diverge in an e-commerce business, and how to close the gap

Reliable async communicator inside a remote international team

Nice to have

Dropshipping / 3PL fulfilment invoicing experience
Experience preparing store-level financials for a sale or due diligence (we sell stores)
Yuki (NL) and/or Xero (US) experience

Experience automating Shopify/ad-account/payment-provider data into reporting

The mindset that matters most

We have worked with bookkeepers who fill cells correctly and stop there. That is not enough for a fast-moving store portfolio. We want someone who notices a store's COGS % drifting and digs into why, who spots a refund leak through an old PayPal account before it eats a month of margin, and who proposes and builds improvements to the reporting system on their own initiative. You should be the person who makes the numbers trustworthy without being asked twice.

How to apply
Start your application with the word RECONCILED so we know you read the full post.

Then answer briefly:

Which Shopify or DTC stores' financials have you run or controlled? Give revenue scale and your exact role.
Walk us through how you would find and close a gap between a store's reported P&L profit and the actual cash in the bank.
Would you prefer to do the daily store P&L hands-on, coordinate a team that does it, or both — and why?

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0007
Controller Execution Time ( Jobseekers / Job )  0.0377
Total Execution Time  0.0390
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,524,120 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Shopify-E-Commerce-Finance-Controller-PL-ROAS-Cashflow-for-a-12-Store-Dropshipping-Group-1652491
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0300 seconds)  (Hide)
0.0010   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0010   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1652491
 LIMIT 1 
0.0014   SELECT *
FROM `employers`
WHERE `employer_id` = 727234
 LIMIT 1 
0.0014   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1652491
AND `misc`.`idIS NULL 
0.0011   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-07-14',ej.date_added) duration_daysDATEDIFF('2026-07-14',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-07-14',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1652491' 
0.0009   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1652491 
0.0013   UPDATE employer_jobs SET hit_counts '***May-21-2026=126***May-22-2026=32***May-23-2026=14***May-24-2026=8***May-25-2026=8***May-26-2026=6***May-27-2026=2***May-28-2026=5***May-29-2026=2***Jun-01-2026=2***Jun-02-2026=15***Jun-04-2026=1***Jun-06-2026=1***Jun-08-2026=1***Jun-09-2026=4***Jun-13-2026=1***Jun-14-2026=1***Jun-15-2026=2***Jun-19-2026=1***Jun-20-2026=1***Jun-21-2026=2***Jun-23-2026=1***Jun-29-2026=1***Jul-02-2026=1***Jul-03-2026=1***Jul-05-2026=2***Jul-06-2026=1***Jul-07-2026=1***Jul-09-2026=1***Jul-14-2026=1' WHERE job_id'1652491'  
0.0012   UPDATE employer_jobs SET monthly_hits '***May-2026=203***Jun-2026=34***Jul-2026=8' WHERE job_id'1652491'  
0.0014   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1652491' AND status LIKE 'sent%' ORDER BY id DESC  
0.0009   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1652491 
0.0168   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '727234'
AND `date_added` >= '2022-06-08' 
0.0009   select from teasers 
0.0008   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)