Apotea Scraper for Swedish Pharmacy Catalogue Data

Apotea Scraper
Solutions

Delivery, Scheduling and Formats

We build and run the crawler; you receive data. Output is CSV, JSON, XLSX or a REST API, pushed to S3, Google Cloud Storage, an SFTP drop or your warehouse. Schedules run daily, weekly or monthly, and price-sensitive lists can run more often.

Scope is yours to set: a full pass over the public catalogue, one Kategori leaf such as D-vitamin, a single brand namespace, or a watchlist of EANs you already track. We hold a stable product key across runs so a pris or lagerstatus change arrives as a diff rather than a re-import, validate every field before delivery, and repair the parser when the markup moves.

Fields Available on a Public Apotea Page

A public Apotea page carries a schema.org Product block in JSON-LD alongside the rendered HTML. Between the two, these are the fields worth taking:

  • Name and slug - the title packs brand, dosage form, strength and pack size into one string, as in "Ipren, filmdragerad tablett 400 mg 30 st".
  • Pris (price) - a numeric value with priceCurrency SEK and a priceValidUntil date in the JSON-LD offer.
  • Jämförpris (comparison price) - rendered as "Jfr-pris" with a per-unit figure such as kr/tablett or kr/kapsel.
  • Lagerstatus (stock status) - banded text rather than an exact count, for example "Fler än 100 st i lager", plus a schema.org availability value of InStock or OutOfStock.
  • EAN - the 13-digit barcode, published in the Produktfakta list and again as gtin13 in the JSON-LD.
  • Varunummer - the Nordic article number, present for medicine and used as the key for the leaflet request.
  • Klassificering (classification) - the regulatory class, with values such as "Receptfritt läkemedel" or "Kosttillskott".
  • Förpackningsstorlek (pack size) - for example "30 tabletter" or "60 kapslar".
  • Varumärke (brand) and Kategori (category) - the category is a breadcrumb path, and a product can sit under more than one.
  • Bäst före-datum (best before date), Egenskaper (properties, such as Vegan), the image set on the media host, and the Betyg (rating) block.

Swedish number formatting uses a decimal comma, so 1,70 kr/tablett is one krona seventy. We normalise that to a decimal point before delivery and keep the raw string in a second column so nothing is lost. Product URLs are flat slugs at the root of the domain with no /product/ segment, and a repeated slug takes a numeric suffix, so the stable join key is the article number rather than the path.

Fields Available on a Public Apotea Page
What Apotea Scraping Has To Handle

What Apotea Scraping Has To Handle

Three things on apotea.se repay a second look, and each one shapes how an Apotea scraper should be built.

Prishistorik. Each product page has a price history section that is absent from the initial HTML. It is filled by a request carrying the numeric article id, the same id that appears in the JSON-LD identifier for that product. That yields a published price series per article without waiting for your own crawl to accumulate one, and it can be captured alongside the current price.

The leaflet endpoint. Medicine descriptions are not inlined either. The page requests a separate FASS path with the varunummer as a query parameter. That path is disallowed in robots.txt, so we do not request it. It also means aktiv substans (active substance) text is not part of the public product page, and we do not offer substance data or any substitution list as something we collect.

Reviews. Ratings sit in a Betyg block served by a third-party review widget rather than in the page body, so review counts and scores need their own step and their own request budget.

What we collect is public product and pricing data. No patient, prescription or customer data - prescription records are patient data, and we do not touch them.

What Apotea Is and Why Its Data Is Different

Apotea is a Swedish online pharmacy. It has no shop counter; the whole business runs through apotea.se, so the catalogue on the website is the business. That matters when you plan an Apotea scraper, because a pharmacy catalogue is not one flat product list.

Swedish pharmacy retail splits the assortment into groups that the site treats differently. Receptbelagt (prescription-only) medicine cannot be browsed, priced or added to a basket by an anonymous visitor. It sits behind an identified account, and the prescription itself is a patient record held in a national register, not a field on a web page. Receptfritt (over the counter) medicine is fully public: it has a price, a pack size and a buy button, and it carries a standing notice reading "Det här är ett receptfritt läkemedel. Läs bipacksedeln noga före användning." Handelsvaror (general goods) covers the rest - kosttillskott (food supplements), skincare, baby and pet goods - and behaves like ordinary e-commerce.

Only the last two groups are publicly visible, and those are the only ones we collect. Pharmacies in Sweden operate under a licence from Läkemedelsverket, the Medical Products Agency, which also supervises distance and online sale of medicine. Every page on apotea.se carries a footer link out to that agency's public register of notified e-retailers, with a per-retailer anchor, so the operator's status is verifiable from the page itself. The same regulation is why the pricing block on a product page looks the way it does.

Get a Quote
dev_w
25

Developers

customers
500+

Customers worldwide

pages
1 500 000 000+

Pages extracted

stime
15000+

Hours saved for our clients

Plans

Airplane

€199 / one-time

setup fee - included

Data limits100,000
Frequencyone-time
Run timeup to 5 days
Data storing7 days

Helicopter

€169 / mo

setup fee €499

Data limits250,000
Frequencymonthly
Run timeup to 5 days
Data storing14 days

Glasses

€229 / mo

setup fee €499

Data limits1,000,000
Frequencyweekly
Run timeup to 5 days
Data storing30 days

DNA

€549 / mo

setup fee €799

Data limits3,000,000
Frequency3 times daily
Run timesame day
Data storing90 days

Why Buyers Ask for Apotea Price Data

The people who ask us to scrape Apotea tend to fall into three groups. Brand owners who sell through the pharmacy want to see how their own lines are listed, priced and rated next to competing lines in the same Kategori path. Competing retailers - other Swedish pharmacies and grocery chains carrying receptfritt medicine and health goods - want a daily price and stock read against a shared EAN list. Analysts want the assortment itself: what is stocked, in which pack sizes, under which Klassificering.

Jämförpris is the field that makes the comparison work. Health goods are sold in pack sizes that do not line up. The same strength appears as a 10-tablet pack and a 30-tablet pack; the same nasal spray appears in more than one bottle size. A headline price tells you very little on its own. The per-unit figure is the only number you can set side by side across pack sizes and across retailers, and Swedish price marking rules require it, which is why it is present and consistent rather than optional.

The second reason is churn. Prices and campaign flags move on a campaign calendar, stock bands move faster, and demand is seasonal in a way general retail is not: allergy goods in spring, cold and cough goods through the Swedish winter. A single snapshot ages badly. A scheduled series does not.

Related Case Studies

The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days

The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days

Scraping supplement products from iHerb.com with full details, including descriptions and packaging variations.

Learn More about The Entire Iherb Supplements Catalog, Captured End-to-End in 3 Days
The Lowest Allegro Prices from 150K Eans Collected

The Lowest Allegro Prices from 150K Eans Collected

Daily scraping of lowest prices for 150K products on Allegro.pl to support marketplace pricing and margin optimization.

Learn More about The Lowest Allegro Prices from 150K Eans Collected
Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset

Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset

Regular monitoring of Ralph Lauren clothing, footwear, and accessories sold across Amazon subdomains: AE, DE, ES, FR, IT, NL, PL, UK.

Learn More about Ralph Lauren Monitoring on Amazon, 8 Markets Scanned Into One Clean Dataset
Our Blog

Reads Our Latest News & Blog

Learn how to use web scraping to solve data problems for your organization

6 E-Commerce Sites Like eBay to Scrape in 2026

6 E-Commerce Sites Like eBay to Scrape in 2026

If you sell online, run a marketplace, or advise e-commerce clients, you already know why eBay matters: it’s one of the few places where big retailers compete side by side with thousands of small merchants and private sellers.

Top 8 E-commerce Websites to Scrape in 2026 (From Amazon to 1688)

Top 8 E-commerce Websites to Scrape in 2026 (From Amazon to 1688)

E-commerce teams do not just need “some” competitor data anymore. They need a continuous stream of real prices, discounts, stock levels, reviews, and seller behavior from the platforms that actually shape their markets.

How to Scrape Amazon Data: Benefits, Challenges & Best Practices

How to Scrape Amazon Data: Benefits, Challenges & Best Practices

Amazon provides valuable information gathered in one place: products, reviews, ratings, exclusive offers, news, etc. So scraping data from Amazon will help solve the problems of the time-consuming process of extracting data from e-commerce.

scrapeit logo

Working with ScrapeIt

ScrapeIt is a managed web scraping agency. We are not handing you a library or a proxy pool to operate. We scope the job, write the crawler, run it on our own infrastructure, monitor it, and hand over checked data in the format your team already uses.

We collect publicly accessible pages, follow the robots.txt directives a site publishes, keep request rates modest, and stop when a site asks us to. Send us the URL patterns and the field list you need and we will come back with a sample extract and a quote.

FAQ

Does Apotea have a public API for product and price data?

No public product API is documented for apotea.se. We found no developer portal, no API documentation and no open endpoint intended for third-party product access. The site does call internal routes of its own, including a price history call and a leaflet call, but those are private application plumbing rather than a published interface, and one of them is disallowed in robots.txt. The practical route to Apotea data is therefore a maintained crawler over the public catalogue, which is what we run. If an official feed is published later, we would move to it, because a supported feed is cheaper to maintain than a parser.

Can you scrape receptbelagt prescription medicine prices from Apotea?

No, and not because it is technically hard. Prescription-only medicine is not a public catalogue in Sweden. It cannot be browsed, priced or bought by an anonymous visitor, the account area is disallowed in robots.txt, and a prescription is a patient record held in a national register rather than a field on a product page. We collect the publicly visible catalogue only: receptfritt medicine and handelsvaror. No patient, prescription or customer data is collected at any point.

What does a plain HTTP request to apotea.se return?

A request with no browser context is refused. Checked on 2026-08-31, a straight HTTPS GET to the apotea.se home page and to /robots.txt each returned HTTP 403. The site sits behind a CDN with bot protection, so a naive script receives a challenge response instead of product HTML. We treat that as an engineering and politeness problem: modest concurrency, sensible pacing, and honouring the published disallow list, which covers the search path /sok/, sorted and filtered URL variants, the checkout and account areas, and the leaflet path. We do not defeat protections or solve CAPTCHAs, and we stop rather than push.

How many Apotea products can you extract?

We do not publish a catalogue count, because it moves and a stale figure is worse than none. The size is measured rather than guessed: we run a discovery pass over the sitemap and the Kategori tree, report the URL count we actually resolved and the date we resolved it, and you set the scope from there. Discovery is straightforward once the tree is walked, since product URLs are flat slugs at the root of the domain. Listing pages paginate, and where a branch runs into a result cap we split it by sub-category or by brand so nothing is lost behind the cap.

How often can Apotea prices and stock be refreshed?

Daily is the common choice and it suits the data: pris and campaign flags move on a campaign calendar, while lagerstatus moves faster and is published in bands rather than exact units. Some buyers run a small watchlist several times a day and a full catalogue pass weekly, which keeps request volume low and still catches price moves. Seasonal periods are worth tightening, such as allergy goods in spring and cold season through the Swedish winter, and frequency can be raised for those branches alone. The schedule and the field list stay under your control.

How does it Work?

Step 1 - Make a Request

You share your needs, expectations, and desired timeframe. We’ll suggest the best solution based on your request and budget.

Step 2 - Configuring Custom Web Crawlers

Our specialists configure the crawlers and extract a sample dataset for your review before proceeding with the full-scale extraction.

Step 3 - Collect and Deliver

Once you approve the sample, we launch the project and start full data collection. We gather, filter, and structure the data for easy use, delivering it on time in your preferred format.

Step 4 - Maintain and Support

Our team manages ongoing processes, monitors website changes, and supports all data extraction cycles. We can also help integrate data into your systems or create dashboards to simplify analysis.

Request a Quote

Tell us more about you and your project information.
Which sites, which fields, how often. A couple of lines is enough.

We reply within 1 business day. No obligation.

scrapiet

Scrapeit Sp. z o.o.
10/208 Legionowa str., 15-099, Bialystok, Poland
NIP: 5423457175
REGON: 523384582