High-Performance API for Product Data Extraction

Job ID: 39718575

Budget: €12 – €18 EUR

Title

High-Performance API to Get Product Info & Alternative Images + Brand Logo
(No Upload, Anti-Blocking, Private to My App, Easy Azure Deployment)

Description

Build a fast, low-latency API with two main functions:

Get product info & alternative product images

Input: product page URL (Amazon, Noon, etc.)

Output:

siteName (e.g., “Amazon”, “Noon”)

name, brand, description

List of alternative product images from other sources (manufacturer/reputable retailers — not Amazon/Noon CDN)

Get brand logo (site picture)

Input: any website URL

Output:

The main brand logo image (transparent PNG/SVG or clean JPG; not favicon, not screenshot)

Important

API must not upload files — my app uploads to Azure Blobs using my existing method:

public async Task<string> Upload(Stream filesStream, string fileName)


This method will not change.

The API only returns data (URLs + metadata).

Performance Requirements (Very Fast)

Median response time for typical requests: < 1 second.

Cold start optimization: warm-up logic or Azure Always On.

Parallel extraction: run logo extraction, product detail parsing, and image search in parallel.

Concurrent API calls to search providers with short timeouts & failover.

Preflight HEAD checks run in parallel; no sequential blocking.

Caching: in-memory + optional Redis; cache hits served in <100 ms.

Async/non-blocking I/O for all network calls.

Efficient HTML parsing (stream-based if possible).

Security: Only My App Can Use This API

HMAC request signing (X-Client-Id, X-Date, X-Nonce, X-Signature, 5-min skew, replay protection).

IP allowlist (my server IPs only).

Strict CORS to my origin(s).

Rate limiting per client & IP.

TLS only; mTLS optional.

Secrets in Azure Key Vault; support key rotation.

Apply to all endpoints (including proxy).

Endpoints
1) Product info + alternative images
GET /api/product-info-images?url={productUrl}&take=12


Output includes siteName, name, brand, description, and candidates with:

previewUrl, downloadUrl, suggestedFileName

contentType, dimensions, bytes, sourceHost, license

directDownloadOk, recommendedHeaders, useProxy

2) Brand logo (site picture)
GET /api/site-picture?url={siteUrl}


Extract logos from HTML (img in header/nav with “logo” in class/id/alt), JSON-LD, <link rel="logo">, OG/Twitter image if clearly a logo.

Prefer transparent PNG/SVG, ≥128px, square or horizontal rectangle.

Avoid product shots, banners, or icons only.

(Optional) Proxy for blocked hotlinks
GET /api/proxy/image/{id}


Streams bytes with required headers.

No storing/uploading in API.

Anti-Blocking Requirements

Preflight each image (HEAD/GET), set directDownloadOk, recommendedHeaders, useProxy.

Respect 429/Retry-After, timeouts, and polite headers.

Per-host concurrency caps; exponential backoff with jitter.

Cache positives (1–24h) and negatives briefly.

Tech

.NET 8 Web API, Python FastAPI, or Node.js (Nest/Express).

Fully async, non-blocking design.

Clean code, DI, env-based config, caching layer.

Containerized with Dockerfile.

Easy Azure Deployment (Must-Have)

One-click or one-command deployment to Azure:

Option A: Bicep/Terraform for Azure App Service (Linux), Key Vault, Application Insights, optional Redis.

Option B: Docker + Azure Container Apps via GitHub Actions.

GitHub Actions pipeline: build, push, deploy, set app settings, bind MI to Key Vault.

CORS, IP restrictions, secrets in Key Vault.

README with a single deploy command or “Deploy to Azure” button.

Deliverables

Source code + infra templates + GitHub Actions workflow.

Postman/Thunder collection or .http examples.

README: local run, Azure deploy, config, secrets, sample calls.

Minimal HTML test page (optional).

Timeline


1–2 weeks

To Apply

Show similar work (scraping, product data extraction, logo discovery, secure APIs, high-performance Azure apps).

Confirm:

No uploads in API.

HMAC + IP allowlist + CORS + rate limiting.

Anti-blocking & caching.

One-click Azure deployment.

Fast (<1s median response).

Propose stack/tools + provide ETA.