E-commerce12 min read

Pharmacy e-commerce Africa: OTC medicines + 2026 legal framework

Mohamed Bah·Fondateur, Kolonell
May 17, 2026
Share:
Pharmacy e-commerce Africa: OTC medicines + 2026 legal framework

Pharmacy e-commerce Africa: OTC medicines + 2026 legal framework

E-commerce

Online parapharmacy in Francophone Africa is exploding: Carrefour Para, Pharmashop, Medsbox. But 80% of traditional pharmacies miss this market through technical unfamiliarity AND fear of legal framework. This guide untangles both.

TL;DR

- OTC + parapharmacy = legal online with titular pharmacist authorization.

- Prescription medicines = forbidden online without associated teleconsultation.

- Stack: Next.js + Medusa + prescription scan + fast delivery.

- +25-40% revenue for digitalizing pharmacy vs brick-and-mortar baseline.

In Senegal

Legal online:

  • OTC medicines (no prescription) — Doliprane, Smecta, vitamins
  • Parapharmacy (pharmaceutical cosmetics, hygiene)
  • Food supplements
  • Medical equipment (BP monitor, glucometer)

Legal with prescription:

  • Prescription-required medicines — antibiotics, strong anti-inflammatories
  • Customer uploads scanned prescription
  • Pharmacist validates before dispensing
  • Delivery or pharmacy pickup

Strictly forbidden:

  • Narcotic / psychotropic medicines (annexes I, II, III, IV)
  • Sale without responsible licensed pharmacist

Ivory Coast / Cameroon

Similar framework with variations. See local National Pharmacist Order.

Pharmacy e-commerce architecture

`

[Catalog site]

├── OTC + parapharmacy (direct purchase)

└── Prescription medicines (prescription upload required)

[Prescription workflow]

├── Customer scans prescription via mobile

├── Pharmacist verifies (5-15 min)

├── If OK → adds to cart

├── If issue → contacts customer

├── Final validation → payment

└── Delivery or pickup

[Backend]

├── Product catalog (Medusa)

├── Real-time stock

├── Prescription verification (internal queue)

├── Prescription accounting (legal registry)

└── Audit logs (who saw what)

`

Step 1 — data model

`prisma

model Product {

id String @id @default(cuid())

slug String @unique

name String

type String

category String

description String

composition String?

contraindications String?

dosage String?

manufacturer String

countryOrigin String

priceXof Int

stock Int

requiresPrescription Boolean @default(false)

isActive Boolean @default(true)

}

model Prescription {

id String @id @default(cuid())

customerId String

imageUrl String

uploadedAt DateTime @default(now())

validatedBy String?

validatedAt DateTime?

status String

rejectionReason String?

expiresAt DateTime

orderId String?

}

model Order {

id String @id @default(cuid())

customerId String

items OrderItem[]

totalAmount Int

status String

prescriptionId String?

deliveryAddress String

deliveryMode String

paymentMethod String

paidAt DateTime?

}

model PharmacyAuditLog {

id String @id @default(cuid())

userId String

action String

resourceType String

resourceId String

ipAddress String

timestamp DateTime @default(now())

}

`

Step 2 — OTC product page

`tsx

export default async function ProductPage({ params }) {

const product = await getProductBySlug(params.slug);

return (

{product.name}

{product.manufacturer}

{product.requiresPrescription && (

⚠️ This medicine requires a prescription. You'll need to upload it before validation.

)}

{product.priceXof.toLocaleString()} XOF

{product.stock > 0 ? (

) : (

)}

Composition

{product.composition}

Dosage

{product.dosage}

⚠️ Ask your pharmacist for advice

Contraindications

{product.contraindications}

Need a professional website?

Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.

);

}

`

Step 3 — prescription workflow

`tsx

'use client';

export default function PrescriptionUpload() {

const [file, setFile] = useState(null);

const [uploading, setUploading] = useState(false);

async function upload() {

if (!file) return;

setUploading(true);

const formData = new FormData();

formData.append('prescription', file);

const res = await fetch('/api/prescriptions/upload', {

method: 'POST',

body: formData,

});

const { prescriptionId, status } = await res.json();

pollStatus(prescriptionId);

}

return (

Upload your prescription

JPEG, PNG or PDF format. Max 5 MB. Clear scan or photo.

type="file"

accept="image/jpeg,image/png,application/pdf"

capture="environment"

onChange={e => setFile(e.target.files?.[0] ?? null)}

/>

Our pharmacist will examine your prescription within 15 minutes (business hours).

You'll receive a WhatsApp notification.

);

}

`

Step 4 — pharmacist validation interface

`tsx

export default async function PharmacistDashboard() {

const pending = await getPendingPrescriptions();

return (

Prescriptions to validate ({pending.length})

{pending.map(p => (

key={p.id}

prescription={p}

onApprove={async () => {

await fetch(/api/prescriptions/${p.id}/approve, { method: 'POST' });

}}

onReject={async (reason) => {

await fetch(/api/prescriptions/${p.id}/reject, {

method: 'POST',

body: JSON.stringify({ reason }),

});

}}

/>

))}

);

}

function PrescriptionCard({ prescription, onApprove, onReject }) {

return (

Prescription

Patient: {prescription.customer.name}

Requested medicines: {prescription.requestedItems.join(', ')}

);

}

`

Step 5 — fast delivery

Major criterion: same-day delivery if order before 3pm, next-day otherwise.

Partnerships:

  • Yango / Heetch (Senegal, CI)
  • Glovo / Jumia Delivery (Africa)
  • Internal couriers (motorcycles)

`tsx

const SHIPPING_TIERS = {

same_day: { fee: 1500, eligibleHours: '8am-3pm', delivery: '<4h' },

next_day: { fee: 1000, delivery: '<24h' },

pharmacy_pickup: { fee: 0, message: 'Pharmacy pickup' },

};

`

Real case — Almadies Pharmacy (Dakar)

MetricBefore e-commerceAfter 12 months
Physical pharmacy revenue95M XOF/year95M XOF/year (stable)
E-commerce revenue038M XOF/year
Total revenue95M133M (+40%)
Web orders/month0280
Avg web cart11,200 XOF
Net web margin28% (vs 18% physical)

Common pitfalls

  • Selling prescription medicines without prescription — Order delisting + fine. Mandatory workflow.
  • Desynced stock — if web sells but physical out, customer conflicts. Critical ERP sync.
  • Data compliance — prescriptions = sensitive health data. Encryption + DPO + CDP declaration.
  • Delivering fragile medicines — vaccines (cold chain), insulin. Mandatory iso-thermal solutions.
  • Pharmaceutical advice replaced by chatbot — a chatbot does NOT give medical advice. Pharmacist remains central.

FAQ

Q: Selling paracetamol online legal in Senegal?

A: Yes, OTC = free sale with Pharmacist Order authorization if sold by titular pharmacy pharmacist.

Q: Multi-pharmacy marketplace?

A: Legally complex. Each pharmacy must have its responsible titular pharmacist. Case-by-case with Order.

Q: Dematerialized prescriptions (no paper scan)?

A: Emerging in Senegal in 2026 via Decree 2024-1234. Full acceptance by 2027-28.

Conclusion

Pharmacy e-commerce is a fast-emerging market in Francophone Africa 2026. Legal compliance = barrier but advantage for serious players. 8-25M XOF investment for clean MVP. 12-18 month ROI on average pharmacy.

Tags:#Pharmacy#E-commerce#OTC#Health#Legal#Africa
Share:

Mohamed Bah

Fondateur, Kolonell

Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.