About the client
Agropunkt Sp. z o.o. is an agricultural wholesaler and online store based in Zator, Poland, operating at sklep.agropunkt.eu. The company supplies farms, growers and hobbyists with the full range needed across the growing cycle - from plant protection products (PPP), through fertilizers and biostimulants, to seeds, garden soil and agricultural accessories. The catalog holds over 3,000 SKUs, served in parallel across e-commerce, a brick-and-mortar store and the Allegro marketplace.
Agropunkt is an unusually demanding project in several respects. The nature of the industry means agricultural e-commerce combines the traits of a typical B2C store (fast checkouts, high SKU rotation), heavy B2B (large pallet orders, invoices, trade credit, ERP) and a legally regulated environment - selling plant protection products is supervised by the PIORiN inspection, requires buyer verification, a five-year sales registry and logistics restrictions. Add to that extreme seasonality - spring is seeds and fertilizers, summer is plant protection, autumn is winter cereals - which means keeping infrastructure ready for three-to-fourfold traffic spikes in peak season.
The second specific trait is profitability - the client's margins hover between 1-5% per product. Every advertising zloty is critical, and every store slowdown, every misbooked order or every faulty ERP sync hits the bottom line directly. The Agropunkt project was therefore not just another PrestaShop migration - it was a multi-layer digital transformation, tying technical infrastructure, legal compliance and performance marketing into one coherent whole.
The challenge
The starting point was typical of PrestaShop stores that have outgrown their original architecture. The platform, on PrestaShop 8.2, loaded in over five seconds on desktop and was practically unusable on mobile - while mobile traffic already accounted for more than half of all sessions. The installation was burdened with 23 redundant modules (leftovers from past deployments, A/B tests, disabled integrations) that still queried the database, registered hooks and weighed down every request.
On the business layer, the store had no carrier integration whatsoever, which meant manual label printing, no shipment tracking and - for pallet orders - separate communication with the logistics operator. Google visibility was below the category's potential, bounce rate exceeded acceptable thresholds for the agricultural sector, and cart abandonment stayed high.
The biggest challenge, however, was neither the technical migration nor marketing optimization. It was the upcoming Polish Plant Protection Products Act with a hard deadline of March 6, 2026. The law introduces mandatory buyer verification at the order stage, a mandatory five-year sales registry, a ban on delivering PPP to parcel lockers and pickup machines, and a total ban on selling selected substances online (fumigants). Violations carry PIORiN fines between €230 and €23,000 per confirmed breach. The deadline was immovable, and the scope of changes - fundamental.
PrestaShop 8.2 - load times above 5 s
23 redundant modules slowing the backend
No carrier integrations (DPD, Raben)
Manual courier label printing
Weak organic visibility in Google
High bounce rate, cart abandonment above the industry average
Mobile traffic practically unusable
No compliance with the upcoming PPP law
No Comarch Optima ERP synchronization
No GA4 / Google Ads conversion tracking
Migration to PrestaShop 9.0.2 + PHP 8.3
Load time under 3 s (GTmetrix Grade B)
Full DPD integration (door-to-door + PUDO + COD)
Raben integration for pallet shipping
Comarch Optima ERP sync (products + orders)
KS SOR module - full legal compliance by Mar 6, 2026
A five-year registry with a retention policy
Full GA4 + Google Ads + server-side GTM tracking
Google Ads campaigns + SEO with measurable ROAS
SEO-friendly information architecture (Pretty URLs)
The project was ultimately delivered as a complete digital transformation - from the technical platform migration, through building seven custom modules (including the compliance-critical KS SOR module), to managing Google Ads campaigns, organic SEO and ERP integrations. The full production migration took place on January 20, 2026, with roughly a six-week buffer before the PPP regulations came into force.
Scope of work
1. PrestaShop 8.2 → 9.0.2 migration
Migrating between PrestaShop 8.x and 9.x is not an update in the usual sense. It is a full generational leap, requiring upgrades to the PHP layer, Symfony, the database and every installed module. On top of that, PrestaShop 9 introduces significant changes to security policy (restrictive .htaccess rules), Twig/Symfony template handling and PHP 8.3 compatibility, where many language mechanisms were removed or changed semantics.
The migration scope covered upgrading every layer of the stack and carrying over the store's full operational history - products, customers, orders, variants, images and category structures - while preserving referential integrity and SEO visibility.
PrestaShop 8.2.0
PHP 8.1
Symfony 5.x
An old, non-deterministic cache
Modules incompatible with PS9
No Twig/Symfony 6 compatibility
PrestaShop 9.0.2
PHP 8.3
Symfony 6.4
MySQL 8.0
Full module compatibility (custom included)
OPcache + Smarty + Symfony cache
The data migration itself demanded the utmost care. The key business requirement was preserving full order history integrity - not just for operations, but also for annual reporting, Comarch Optima ERP reconciliation and the client's tax obligations. At the same time we had to protect SEO rankings, since organic traffic accounted for a significant share of total revenue.
-
3,000+ products with variants
Price combinations, stock levels, photos, descriptions, attributes - a full migration of the variant structure -
15,000+ customers with history
Accounts, delivery addresses, preferences, login history, messages - full data continuity -
Order history with integrity
Status, products, historical prices, invoices, ERP links - all IDs preserved -
500+ SEO 301 redirects
A URL structure change with rankings preserved - a redirect map from every old path
2. Post-migration compatibility fixes
A packaged PrestaShop migration never goes incident-free - especially when the store has been extended for years with third-party modules and integrations. Each of the four issues below had to be solved individually, often at the level of PrestaShop core code or external modules.
Restrictive .htaccess in PrestaShop 9
PS9 blocks direct calls to PHP files in modules/ by default. This hit two critical sync mechanisms: RtnetSubSync (OpSync/Subiekt GT) and x13allegro, which started returning 403 Forbidden. The fix was dedicated .htaccess exceptions for sync.php and Broker.php.
Missing product images
After the migration, some URL rewrite rules in .htaccess carried a host condition checking for localhost:8082, left over from the development environment. Result: images loaded on staging but returned 404 in production. The fix removed the host condition so the rules work for all domains.
The dpdshipping module - a Twig error under Symfony 6
The installed DPD module, built for PS 8, threw Twig template rendering errors after the move to Symfony 6. The solution was installing the official dpdshipping 2.0.1 release, built for PrestaShop 9.
PHP 8.3 compatibility in PrestaShop core
PHP 8.3 enforces stricter typing and removes legacy behaviors. Fixes were needed in four files: classes/checkout/DeliveryOptionsFinder.php (a type check on $carrier['delay']), classes/PaymentModule.php (changed array iteration - an array cannot be a key), src/Core/Payment/PaymentOptionFormDecorator.php (silencing DOMDocument warnings) and themes/Agropunkt/shipping.tpl (isset() before $carrier.logo).
3. KamikStudio custom modules - 7 dedicated extensions
Standard PrestaShop functionality, even in version 9, did not cover the client's requirements - business (agricultural specifics), legal (PPP compliance) or performance (filters across 3,000 SKUs). So we delivered seven custom KamikStudio modules, designed specifically for this store's architecture and integrated into its workflow.
KS Homepage v1.0.0
A dedicated homepage engine with dynamic promo banners, featured product sections, a dosage calculator for plant protection products and multilingual integration. The module lets the client's marketing team manage the entire homepage from the back office, without touching the Smarty template.
KS Listing Pro v1.0.0
Multi-criteria AJAX filters tailored to agriculture, a product comparison tool, lazy loading, infinite scroll. The module adds four dedicated tables: ps_ks_product_fields, ps_ks_crops, ps_ks_problems and ps_ks_substances, enabling filtering by crops, crop problems and active substances - crucial for professional customers.
KS Shipping v1.0.0 + carrier integrations
A shipping cost engine accounting for weight, volume and distance. Integration with dpdshipping 2.0.1 (official), the pddeliverycostbydistancepro v2.4.6 module with a 144-record pricing table (12 weight ranges × 6 distance ranges × 2 carriers) and configuration of the Raben (min_cost=136 PLN) and Raben COD (extra_cost=30 PLN, min_cost=136 PLN) carriers.
KS GTM DataLayer v1.5.0
A dataLayer injection module for Google Tag Manager with the full e-commerce event set: view_item, add_to_cart, begin_checkout, purchase. It also implements server-side refund tracking via the Measurement Protocol - refunds land in GA4 independently of the frontend. GTM container GTM-KN253GN9, GA4 property G-XNYMG8YRZ6, Google Ads Conversion ID 16922344952.
KS Pretty URLs v1.0.0
A rewritten product and category URL router built for SEO. Products follow /srodki-ochrony-roslin/roundup-dynamic-5l, categories /herbicydy-srodki-chwastobojcze. The module handled 500+ 301 redirects from the old URL structure, fully preserving Google index positions.
KS Integrator v1.0.0 - Comarch Optima synchronization
Two-way product data sync with the Comarch Optima ERP via the OpSync/sync_attachments.ps1 PowerShell script and the module's REST API: POST /index.php?fc=module&module=ks_integrator&controller=api. SHA-256 token authorization, upsert, delete, ping actions. Records are pulled from the Optima database (CDN_Zator) tables CDN.Towary, CDN.DaneBinarneLinki and CDN.DaneBinarne. In PrestaShop the cache_has_attachments=1 flag is set in ps_product. Data retention: 5 years.
KS SOR v1.0.0 - compliance with the Plant Protection Products Act
A business-critical module ensuring the store's compliance with the PPP law coming into force on March 6, 2026. It covers buyer verification, logistics restrictions and the five-year registry - details in the section below.
4. KS SOR - legal compliance as a product feature
The Plant Protection Products Act, as in force from March 6, 2026, imposes three pillars of requirements on an online PPP seller: mandatory buyer verification, logistics bans and restrictions, and a mandatory five-year registry. The KS SOR module was designed so that each pillar has its place in the data model and the purchase flow - not as an "overlay", but as a natural part of the PrestaShop flow.
-
PPP buyer verification
Full name, certificate number, issuing body, expiry date - a mandatory form at the first PPP purchase, with expiry validation on every subsequent order -
Logistics restrictions for PPP products
No shipping to InPost parcel lockers, pickup machines or food/feed pickup points - filtered at checkout -
A five-year registry - 6 dedicated DB tables
ps_ks_sor_customers,ps_ks_sor_certificate_history(a change audit, records never deleted),ps_ks_sor_orders(a snapshot of PPP orders),ps_ks_sor_audit_log. Theretention_untilfield = order date + 5 years -
A total online sales ban on fumigants
Selected substances (fumigants) carry a flag excluding them from e-commerce - in-store purchase only -
PPP order snapshots
Every order containing PPP is recorded in a separate registry table together with the certificate data as of the moment of purchase - regardless of later profile changes -
Protection against PIORiN fines of €230-23,000
The module is designed as defense in depth - every statutory requirement has its own enforcement layer in code and in the database
The full PS9 migration together with the KS SOR module went live on January 20, 2026 - more than six weeks before the regulations came into force. This gives the client a time buffer for internal team training and fine-tuning operational procedures.
5. External integrations - four critical flows
An agricultural store does not operate in a vacuum - it connects to carriers, an ERP, accounting systems and marketplaces. For Agropunkt we designed four critical integrations, two synchronous (DPD, Raben) and two cyclic/asynchronous (OpSync, Allegro).
-
DPD Poland - door-to-door courier, PUDO, COD
Thedpdshipping 2.0.1module - automatic labels, tracking, cash on delivery, PUDO point selection at checkout. Fully guarded against the PPP flow (parcel locker blocking). -
Raben - pallet shipping
For large B2B orders (fertilizers, soil - above courier parcel weight) automatic pallet shipment notification, weight/volume calculation. Carrier ID140(RABEN pallet), Carrier ID147(RABEN COD). -
OpSync - Subiekt GT / Comarch Optima (
RtnetSubSync)
Two-way ERP synchronization: order import/export, stock updates, contractor sync. This is the company's accounting and operations backbone - every e-commerce order must reach the ERP without human involvement. -
Allegro (
x13allegro)
Marketplace listing sync: importing Allegro orders straight into PrestaShop, stock updates. Cron*/5 * * * *- a sync every 5 minutes.
6. Performance - Core Web Vitals and GTmetrix Grade B
An agricultural store with 3,000 SKUs, multi-criteria filters and five background sync modules has the potential to grind a server down. So the migration came with hard performance work - starting at the application layer (removing 23 redundant modules, cleaning unused files - over 800 MB), through the database (indexes, OPTIMIZE TABLE), to the frontend (minification, lazy loading, compression).
Compared to the pre-migration state we achieved: load time from ~5 s to 2.9 s (-42%), LCP from ~4 s to 1.9 s (-52%), FCP from ~3 s to 1.6 s (-47%). In agriculture this is not an academic improvement - it translates directly into a lower bounce rate, a higher add-to-cart rate and more transactions, especially on mobile.
Load time: ~5 s (desktop)
LCP: ~4 s
FCP: ~3 s
Mobile - practically unusable
23 redundant modules in play
800+ MB of unused files
No CSS/JS minification
Images without lazy loading
Load time: 2.9 s (desktop)
LCP: 1.9 s
FCP: 1.6 s
Mobile: fully usable
Only active modules, OPcache
A clean file repository
CSS/JS minification + GZIP
Lazy loading, WebP, image compression
Marketing: Google Ads and SEO
The technical side is only half the job. In the Agropunkt partnership model, KamikStudio also manages the Google Ads campaigns and coordinates performance marketing. The client's account is managed through the KamikStudio MCC, in parallel with the external agency Rebena, responsible for SEO, link building, Facebook Ads and analytics.
The defining trait of marketing for Agropunkt is extreme sensitivity to click cost. With 1-5% product margins, a poorly tuned PMax campaign can generate a loss within a week. So the approach is surgical: precise exclusion lists, per-intent segmentation, dedicated RSAs for brand and product campaigns, and continuous bidding strategy testing.
1. Account structure - five campaigns + an exclusion list
The Agropunkt Google Ads account is built around five active campaigns with separated budgets and intents - a general PMax, a product Shopping campaign, local Search, brand Search and Display remarketing. This structure allows measuring ROAS per campaign and allocating budgets day by day.
2. March 2026 optimizations - negative keywords and RSAs
One of the latest optimization sessions (March 30, 2026) added 21 new negative keywords to the shared exclusion list "[Agropunkt] Exclusions - Irrelevant categories". The exclusions covered retail competitors (castorama, leroy merlin, obi), unsupported brands (agrecol, twoj ogrod), hobbyist DIY queries (opuchlaki, pedraki, cma bukszpanowa, spray, do podlewania) and informational queries (etykieta, dawkowanie, forum, opinie, wikipedia, praca, oferty pracy). The list totals 56 phrases applied across 12 campaigns, plus a second list "KS | Negatives - General + Competitors" with 52 phrases across 14 campaigns.
-
Agropunkt Brand RSA - Low → Good
Added 6 headlines (Best Prices on the Market, Zator - Local Pickup, A Wide Agricultural Range, Expert Agricultural Advice, Order Online - 24h Delivery, A Trusted Store Since 2015) + 2 new descriptions -
PPP Products RSA - Low → Average
Added 2 new headlines with product names (Mospilan and Axial - Buy Now, Mustang Forte - Buy Online) + 2 descriptions reflecting product intent -
21 new exclusions in phrase + exact match
Added to the shared list and applied across 12 campaigns at once - a faster response to new unwanted query patterns -
Mospilan - 50% of the Search budget on one product
A monitored anomaly - the Mospilan product consumed €19 over 14 days and needs verification of whether it actually converts
3. Google Ads results - March 13-29, 2026
In a two-week window (March 13-29, 2026) the Google Ads campaigns generated 5,790 clicks, 174,535 impressions and 41.98 conversions at a cost of €260. Conversion value reached €9,470, putting gross ROAS around 36x. In an industry with 1-5% product margins, a 36x ROAS is a comfortable result.
4. Historical campaign results (October 2025)
For comparison - the earlier campaign structure from October 2025 shows where the optimization started. The full breakdown of budgets and results per campaign:
| Campaign | Budget/day | Clicks | Impressions | Conversions | Cost/conv. |
|---|---|---|---|---|---|
| PMAX GENERAL | €5.84 | 2,375 | 63,384 | 799.75 | €0.22 |
| PLA Full Catalog | €7.67 | 6,062 | 195,475 | 30.04 | €7.73 |
| SEARCH Local Zator +50km | - | 638 | 20,369 | 8.4 | €16.18 |
| SEARCH PPP Poland-wide | €5.81 | 1,168 | 41,507 | 5 | €35.34 |
| SEARCH Seeds | €1.16 | 196 | 3,709 | 24.65 | €0.87 (best) |
| PLA Selected Products | €4.65 | 548 | 17,335 | 18 | €7.85 |
| Dynamic Display Remarketing | €1.63 | 345 | 26,693 | 0 (branding) | - |
5. Known campaign issues and the action plan
-
Search conversion tracking - to verify
PMax and Shopping report conversions correctly, but brand Search shows 0 conversions from 144 clicks - likely a broken tag, pending a GTM audit -
PMax limited by the bidding strategy
Google recommends switching to Target ROAS 12,763% - the strategy change is planned after the season (June/July 2026), once the account gathers enough conversion signal -
Mospilan - single-product dominance
The product consumes 50% of the Search budget in 14 days (€19) - needs its own ad group and per-SKU ROAS monitoring -
SEO - 38% organic traffic growth (Aug→Oct 2025)
From 828 to 1,142 sessions per month - two keywords in Google's TOP 10: "jak sadzić czosnek zimowy" (how to plant winter garlic; pos. 6, 101 visits/mo) and "kiedy siać marchew" ("when to sow carrots") (when to sow carrots; pos. 8, 145 visits/mo) -
AI citations (Ahrefs)
ChatGPT: 6, Perplexity: 3, Google AI: 1, Copilot: 2 - the store appears in the answers of major language models -
118 new SEO texts (Aug-Oct)
4 blog articles per month, 88 unique SEO snippets, 16 internal links - a content campaign aligned with the farming calendar
6. Facebook Ads - completing the funnel (August 2025)
Facebook Ads campaigns running alongside Google Ads serve two complementary goals: B2B lead generation for the winter cereals category and abandoned cart remarketing. In August 2025 the "Winter cereals" Lead Ads campaign generated 7 leads (+250% vs July), reach 10,559, impressions 51,309, cost per lead €18, spend €126. The traffic campaign for the "Farmers 30-55" segment delivered 517 landing page views at a reach of 26,159 and a cost per result of €0.24 (spend €125). Abandoned cart remarketing: 2 orders at €16 per purchase.
Technologies
The Agropunkt stack is a full set of e-commerce, ERP and marketing tools integrated into one coherent pipeline. Every item listed has a real role in the project - none of it is "cover-page technology".
PHP 8.3
Symfony 6.4
MySQL 8.0
Twig
Smarty
OPcache
Symfony cache
KS Homepage 1.0.0
KS Listing Pro 1.0.0
KS Shipping 1.0.0
KS GTM DataLayer 1.5.0
KS Pretty URLs 1.0.0
KS Integrator 1.0.0
KS SOR 1.0.0
dpdshipping 2.0.1
pddeliverycostbydistancepro 2.4.6
RtnetSubSync (OpSync)
x13allegro
Comarch Optima (CDN_Zator)
Subiekt GT
DPD Poland API
Raben API
InPost (PPP blocking)
PowerShell (OpSync/sync_attachments.ps1)
SHA-256 token (REST API)
Google Analytics 4
Google Tag Manager GTM-KN253GN9
Measurement Protocol (server-side refunds)
Google Ads Conversion ID 16922344952
Google Merchant Center
Facebook Ads (Lead Ads + Traffic)
Ahrefs
GTmetrix
Core Web Vitals
Schema.org JSON-LD
Pretty URLs + 301 redirects
Apache 2.4 / .htaccess hardening
SSL / HTTPS
GZIP + CSS/JS minification
Lazy loading + WebP
Results
The Agropunkt project delivered measurable results along four parallel axes: technical (performance), business (conversions, revenue), compliance (legal readiness ahead of the deadline) and marketing (ROAS, traffic, SEO positions). Below are the key metrics from the thirty days after launch plus the project's reference parameters:
Summary
Agropunkt is a project that shows KamikStudio is not just code. It is a complete business solution tying a technical migration, legal compliance and performance marketing into one operational continuum. The project covered a full migration from PrestaShop 8.2 + PHP 8.1 to PrestaShop 9.0.2 + PHP 8.3 + Symfony 6.4 + MySQL 8.0 while preserving 3,000+ products, 15,000+ customers and the full order history, fixing four classes of compatibility issues (PS9 .htaccess hardening, missing images, a Twig error in dpdshipping, PHP 8.3 compatibility), building seven custom KS modules (Homepage, Listing Pro, Shipping, GTM DataLayer, Pretty URLs, Integrator with the Comarch Optima ERP, SOR), deploying four critical external integrations (DPD Poland, Raben pallet, OpSync/Subiekt GT, Allegro), ensuring full compliance with the Plant Protection Products Act before the March 6, 2026 deadline (6 registry tables, 5-year retention, logistics restrictions, a fumigant ban), optimizing performance to GTmetrix Grade B (84% perf., LCP 1.9 s, FCP 1.6 s, CLS 0, load time 2.9 s - down 42% from the pre-migration state), running five Google Ads campaigns with a total budget of ~€19/day and a gross ROAS of ~36x, plus supporting SEO efforts that grew organic traffic by 38% and secured TOP 10 positions for 45+ phrases. The full production launch took place on January 20, 2026 - six weeks before the new regulations came into force, giving the client a comfortable operational buffer and protection against PIORiN fines of €230-23,000. The Agropunkt project proves that technology, compliance and marketing must operate as one organism - and that only this approach gives a client in a 1-5% margin industry a real competitive edge.