Μετάβαση στο περιεχόμενο
vexel.gr
Πίσω στο blog
Οδηγός

Τι formats αρχείων στέλνουν οι Έλληνες προμηθευτές (και πώς τα διαβάζεις σωστά)

Πλήρης οδηγός για Apivita, Korres, Frezyderm, Bioten, Farmaceion και άλλους. Τι αρχείο στέλνει ο καθένας, σε ποια συχνότητα, τι παγίδες κρύβει.

Από την ομάδα Vexel · · 10 λεπτά ανάγνωση

Αν έχεις ελληνικό e-shop με 2+ προμηθευτές, ξέρεις το βάσανο: κάθε προμηθευτής στέλνει αρχείο με δικό του τρόπο. Άλλος Excel, άλλος CSV, άλλος XML, άλλος email attachment, άλλος σε FTP server που μερικές φορές πέφτει.

Αυτός ο οδηγός είναι μια καταγραφή όσων ξέρουμε από να δουλέψουμε με 30+ ελληνικά shops και να διαβάσουμε feed από τους πιο συχνούς Έλληνες προμηθευτές. Αν είσαι σε καλλυντικά/φαρμακείο/περιποίηση, μάλλον έχεις πελάτη με τους περισσότερους από αυτούς.

Apivita

Format: XML
Συχνότητα: Daily update (06:00)
Πρόσβαση: B2B portal με login. Manual download ή FTP για approved partners.
Encoding: UTF-8
Παγίδες:

  • Οι περιγραφές προϊόντων είναι στα ελληνικά αλλά με capslock σε ορισμένα fields. Πρέπει να τις normalize-άρεις.
  • Τα variations (διαφορετικά μεγέθη) έρχονται σαν ξεχωριστά SKUs (όχι child products). Πρέπει είτε να τα στείλεις έτσι, είτε να φτιάξεις parent-variation structure μόνος σου.
  • Το <price> field είναι wholesale, με ΦΠΑ. Το markup πρέπει να βγει από εσένα. Συνήθως x1.55 έως x1.7.
  • Στις προσφορές, υπάρχει <promo_price> που overrides το <price>. Αν δεν τη διαβάσεις, χάνεις την promo.

Συμβουλή: Το XML έχει συμβατή δομή με Google Shopping. Αν χρησιμοποιείς ήδη Merchant Center, μπορείς να το χρησιμοποιήσεις σχεδόν αυτούσιο.

Korres

Format: CSV
Συχνότητα: Weekly (Δευτέρα 09:00)
Πρόσβαση: Email attachment από τον account manager. Δεν υπάρχει API ή FTP.
Encoding: Windows-1253 (όχι UTF-8!)
Παγίδες:

  • Το encoding είναι το πιο συχνό σημείο που σπάει. Αν το ανοίξεις σε UTF-8 reader, οι ελληνικοί χαρακτήρες γίνονται «????». Πρέπει να κάνεις explicit conversion.
  • Οι κωδικοί προϊόντων (code) έχουν leading zeros που το Excel τα κόβει. Π.χ. «00120» γίνεται «120». Αν το ανοίξεις σε Excel, χάνεις αυτή την πληροφορία οριστικά αν αποθηκεύσεις πάνω από το αρχικό αρχείο.
  • Το barcode field είναι EAN-13 χωρίς prefix. Πρέπει να το γνωρίζεις για να ταιριάξεις με υπάρχοντα προϊόντα στο shop σου.

Συμβουλή: Πάντα να ξεκινάς αντιγραφή του CSV πριν το ανοίξεις σε Excel. Το αρχικό κρατάει το encoding και τα leading zeros.

Frezyderm

Format: Excel (.xlsx, multi-sheet)
Συχνότητα: Weekly (Πέμπτη 14:00)
Πρόσβαση: B2B portal download
Encoding: Excel default (UTF-8 inside .xlsx)
Παγίδες:

  • Το αρχείο έχει 3 sheets: «Stock», «Prices», «New Products». Πρέπει να τα διαβάσεις και τα τρία και να τα συνδυάσεις με VLOOKUP ή equivalent.
  • Τα prices είναι σε 2 στήλες: «retail» και «wholesale». Το wholesale είναι αυτό που σε ενδιαφέρει.
  • Σε ορισμένες σειρές υπάρχει merged cell που το πρόγραμμα import σπάει.

Συμβουλή: Το πιο εύκολο είναι να μετατρέπεις το .xlsx σε CSV (one sheet at a time) πριν επεξεργαστείς. Έτσι αποφεύγεις τα merged cells και τα formatting issues.

Bioten

Format: XML ή CSV (διαλέγεις στο portal)
Συχνότητα: Daily (μεσημέρι)
Πρόσβαση: FTP με credentials + B2B portal για manual
Encoding: UTF-8
Παγίδες:

  • Στο XML, οι κατηγορίες έρχονται σε nested structure που πολλά CSV importers δεν διαβάζουν. Π.χ. <categories><cat>Hair</cat><cat>Color</cat></categories>. Πρέπει να τις flatten-άρεις.
  • Το available_stock field είναι integer αλλά μερικές φορές έρχεται string («yes»/«no»). Πρέπει να ελέγξεις και τα δύο.
  • Όταν ένα προϊόν είναι discontinued, το feed δεν το αφαιρεί. Απλά βάζει available_stock=0 for ever. Πρέπει εσύ να αποφασίσεις πότε να το πετάξεις από το shop σου.

Συμβουλή: Κράτησε το XML, είναι πιο πλούσιο σε πληροφορία από το CSV.

Farmaceion

Format: CSV
Συχνότητα: Twice daily (08:00 και 16:00)
Πρόσβαση: FTP μόνο (δεν υπάρχει portal)
Encoding: UTF-8 με BOM
Παγίδες:

  • Το BOM σπάει τους περισσότερους Python parsers αν δεν χρησιμοποιείς utf-8-sig encoding. Στο PHP, αν διαβάζεις με fgetcsv, παίρνεις το BOM σαν invisible character στην πρώτη στήλη του πρώτου row.
  • Το category field έχει breadcrumb format: «Καλλυντικά > Πρόσωπο > Κρέμα». Πρέπει να το διασπάσεις.
  • Σπάνια αλλά συμβαίνει: το feed είναι κενό όταν το server τους έχει πρόβλημα. Αν δεν ελέγξεις, νομίζεις ότι όλα τα προϊόντα εξαντλήθηκαν και τα μηδενίζεις στο shop σου. Αυτό έχει γίνει 3 φορές το 2025 σε shops που ξέρουμε.

Συμβουλή: Πάντα να έχεις «sanity check». Αν το feed έρχεται με <50% του προηγούμενου size, μην το εφαρμόσεις. Στείλε email στον εαυτό σου.

Άλλοι (Garden of Panda, Lierac, La Roche-Posay κλπ)

Πάνω-κάτω παρόμοιο μοτίβο:

  • Οι μεγάλοι παγκόσμιοι brands έχουν portal με XML/CSV download.
  • Οι μεσαίοι έλληνες έχουν FTP ή email attachment.
  • Οι μικροί έχουν Excel attachment μόνο.

Το πραγματικό πρόβλημα

Δεν είναι ότι κάθε format είναι δύσκολο. Είναι ότι πρέπει να κάνεις τα παραπάνω για κάθε προμηθευτή ξεχωριστά, κάθε εβδομάδα, και να το ενοποιήσεις όλο σε μία ομοιόμορφη ροή προς το shop σου.

Αν έχεις 5 προμηθευτές, αυτό σημαίνει:

  • 5 διαφορετικά formats να διαβάζεις
  • 5 διαφορετικά encodings να σέβεσαι
  • 5 διαφορετικά markup rules να εφαρμόζεις
  • 5 διαφορετικά schedules να ελέγχεις
  • 5 διαφορετικά failure modes να debug-άρεις

Με ώρες: 2 ώρες/προμηθευτή/εβδομάδα = 10 ώρες την εβδομάδα = €5.760/χρόνο σε χαμένο χρόνο (με ωρομίσθιο 12€).

Εδώ μπαίνουμε εμείς

Στο Vexel Sync έχουμε ήδη γραμμένους parsers για:

  • Apivita, Korres, Frezyderm, Bioten, Farmaceion (όλους τους παραπάνω)
  • 12+ άλλους ελληνικούς προμηθευτές καλλυντικών, παιδικών, συμπληρωμάτων
  • Generic XML/CSV adapters για οποιονδήποτε νέο

Όταν προσθέτεις νέο προμηθευτή, εμείς γράφουμε τον parser (συνήθως 2-4 ώρες δουλειάς). Μετά δουλεύει για πάντα.

Εσύ βλέπεις μόνο: «5 προμηθευτές, 13.247 προϊόντα, last sync 14m, all green».

Από €79/μήνα (με ετήσια χρέωση). Έναντι €480/μήνα που χάνεις σε χρόνο (10 ώρες/εβδομάδα × 12€/ώρα). Σε 5 ημέρες βγάζει τα λεφτά του. Και κερδίζεις πίσω 40 ώρες τον μήνα για να πουλήσεις, αντί να γράφεις σε Excel.