Source status
Connectors, ingestion and pipeline health.
2827
events
7
active
1154
successful ingestions
Marseille Tourisme
website / healthy
Configuration
- Source type:
- website
- Strategy:
- marseille_tourisme_playlist
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
Marseille Tourisme playlist
Dedicated adapter for the Marseille Tourism Office agenda. It reads the public Hawwwai playlist embedded in the agenda page, then supplements it with French FMA detail pages discovered from the public sitemap.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:MarseilleTourismeConnectorRuntime/feed URLs:
- Public agenda page:
- https://www.marseille-tourisme.com/vivez-marseille-blog/agenda/
- Playlist JSON feed:
- https://www.marseille-tourisme.com/api/render/website_v2/marseille-tourisme/playlist/78894/fr_FR/json
- Public sitemap index:
- https://www.marseille-tourisme.com/sitemap.xml/
- Event detail pages:
- Individual public event URLs returned by the playlist feed or discovered from sitemap FMA pages.
How it works:
- Starts from the configured source URL, usually the public agenda page.
- Finds the hawwwai-playlist element and uses its public playlist configuration.
- Requests paginated FMA agenda items from the playlist JSON endpoint with page query parameters.
- Scans the public sitemap for French agenda FMA detail pages that are not present in the playlist feed.
- Fetches event detail pages with bounded concurrency.
- Extracts the detail-page HwSheet description, price text, accepted public/clientele, hours, official images, ticket URL, venue/address, GPS coordinates and date instances.
- Stores multiple date ranges as event instances when the official feed exposes them.
Supported configuration:
max_items:- Maximum playlist items to inspect per sync. Default: 1500.
max_pages:- Maximum playlist pages to request. Default: 200.
include_sitemap_details:- Whether to import valid sitemap-only Marseille Tourisme FMA detail pages. Default: true.
max_sitemap_items:- Maximum sitemap detail pages to inspect per sync. Default: 1500, above the current complete catalog.
sitemap_url:- Optional sitemap index override. Default: https://www.marseille-tourisme.com/sitemap.xml/.
detail_concurrency:- Concurrent detail-page fetches, clamped from 1 to 20. Default: 8.
encoding:- Optional response decoding hint. Default: UTF-8.
- Configuration JSON:
- { "max_items": 1500, "max_pages": 200, "max_sitemap_items": 1500, "detail_concurrency": 8 }
Source Priority
Last Sync
7 Sept 2026, 05:11
Events
968
Active
+0
New
1524
Ever
Interval (min)
JDS Marseille
website / healthy
Configuration
- Source URL:
- https://www.jds.fr/marseille/agenda/
- Source type:
- website
- Strategy:
- jds_agenda
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
JDS Marseille agenda
Dedicated JDS adapter that paginates the Marseille agenda and enriches each listing from its Schema.org event detail page, accepting only physical Marseille locations.
Strategy source file:apps/backend/app/connectors/jds.pyImplementation:JDSAgendaConnectorRuntime/feed URLs:
- Public agenda pages:
- https://www.jds.fr/marseille/agenda/?page={page}
- Event detail pages:
- Individual JDS URLs ending in a stable numeric _A identifier.
How it works:
- Traverses 25-row agenda pages through their rel=next links.
- Fetches detail pages with bounded concurrency and parses Schema.org Event JSON-LD.
- Accepts only addressLocality Marseille, Marseille postcodes 13000/13001-13016, or an explicit Schema.org City named Marseille.
- Rejects nearby cities even though JDS includes them in its Marseille regional agenda.
- Imports full descriptions, dates and repeated date/hour rows, venue/address, GPS, ticket link, free status and largest available images.
- Exposes the deepest JDS agenda breadcrumb as jds_category for Admin Categories mapping.
Supported configuration:
max_items:- Maximum event detail pages to inspect per sync. Default: 250.
max_pages:- Maximum 25-row agenda pages to request. Default: 20.
detail_concurrency:- Concurrent event detail requests, clamped from 1 to 20. Default: 8.
locality:- Documented admission scope; this connector is intentionally fixed to Marseille.
- Configuration JSON:
- { "max_items": 1200, "max_pages": 120, "detail_concurrency": 8, "locality": "Marseille" }
Source Priority
Last Sync
7 Sept 2026, 08:02
Events
1167
Active
+4
New
1366
Ever
Interval (min)
OpenAgenda
api / healthy
Configuration
- Source type:
- api
- Strategy:
- openagenda_v2
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
OpenAgenda API v2
Dedicated OpenAgenda v2 adapter with cursor pagination and per-event detail enrichment for multilingual text, timings, images, registration and location data.
Strategy source file:apps/backend/app/connectors/openagenda.pyImplementation:OpenAgendaConnectorRuntime/feed URLs:
- Configured event feed:
- The OpenAgenda v2 agenda events URL stored on the source row.
- Event details:
- OpenAgenda v2 /agendas/{agenda_uid}/events/{event_uid} endpoints.
- Public event pages:
- https://openagenda.com/fr/{agenda_slug}/events/{event_slug}
How it works:
- Authenticates with OPENAGENDA_ACCESS_KEY from the ignored .env file.
- Preserves repeated relative filters from the configured source URL.
- Traverses OpenAgenda cursor pages through repeated after[] parameters.
- Fetches event detail records with bounded concurrency.
- Uses French localized titles and full descriptions, with English/first-value fallback.
- Imports every official timing as an event instance and keeps the final timing as the event end.
- Selects the largest OpenAgenda CDN image variant first.
- Extracts registration links, conditions/prices, attendance mode and coordinates.
- Exposes source keywords when present, otherwise an explicit category inferred by Planet Mars for admin mapping.
Supported configuration:
agenda_uid:- OpenAgenda numeric agenda identifier. Inferred from the URL when omitted.
public_agenda_slug:- Slug used to build canonical public event URLs.
locale:- Preferred localized content language. Default: fr.
max_items:- Maximum events enriched per sync. Default: 250.
page_size:- Events requested per cursor page, clamped to 1-100. Default: 100.
max_pages:- Maximum cursor pages requested. Default: 10.
detail_concurrency:- Concurrent detail requests, clamped to 1-20. Default: 10.
- Configuration JSON:
- { "agenda_uid": 5137922, "public_agenda_slug": "evenements-massilia", "locale": "fr", "max_items": 1000, "page_size": 100, "max_pages": 10, "detail_concurrency": 10 }
Source Priority
Last Sync
7 Sept 2026, 07:26
Events
357
Active
+0
New
365
Ever
Interval (min)
culturel_marseille
instagram / healthy
Configuration
- Source URL:
- https://instagram.com/culturel_marseille
- Source type:
- Strategy:
- instagrapi
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Instagram instagrapi
Authenticated Instagram private-API strategy selected through config/instagram_connectors.json.
Strategy source file:apps/backend/app/connectors/instagram.pyImplementation:InstagramConnectorRuntime/feed URLs:
- Instagram profile:
- The configured instagram.com account URL.
- Instagram private API:
- instagrapi-managed endpoints; exact URLs are not stored in Planet Mars config.
How it works:
- Loads non-secret strategy selection from config/instagram_connectors.json.
- Uses credentials or a persisted session from ignored .env/storage values.
- Fetches recent public account posts and complete carousel image sets.
- Reads the current profile grid once per sync, then sends only new or changed posts to image download, OCR and OpenAI extraction.
- Records successfully analyzed posts even when they contain no event, preventing repeated token spend on non-event posts.
- Runs enabled local PaddleOCR per slide, then sends caption, OCR and images to the source-selected OpenAI model.
- Imports only validation-ready future Marseille events through the normal deduplication and visibility pipeline.
- Caches extraction by account, post content, prompt version and model so unchanged posts do not spend OpenAI tokens again.
Supported configuration:
default_strategy:- Global Instagram strategy in config/instagram_connectors.json.
sources.<account>.strategy:- Per-account strategy override.
openai_model:- Multimodal extraction model selected per Instagram source.
instagram_options.post_limit:- Latest profile posts checked for new or changed content per synchronization, from 1 to 50. Default for new sources: 20.
instagram_account_type:- Venue, organizer, or mixed account behavior.
instagram_default_venue:- Verified fixed venue used only by venue accounts.
instagram_default_address:- Verified Marseille address used only by venue accounts.
- Configuration JSON:
- { "openai_model": "gpt-5.6-luna" }
Source Priority
Last Sync
29 May 2026, 10:54
Events
1
Active
+0
New
1
Ever
Interval (min)
Marseille Evous
website / healthy
Configuration
- Source URL:
- https://marseille.evous.fr/
- Source type:
- website
- Strategy:
- http
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Generic website scraper
Generic public-page scraper for simple website sources.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:WebsiteConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Downloads the configured public URL.
- Selects article/event-like HTML nodes.
- Builds raw event candidates from visible text and the first link.
- Relies on the shared extraction pipeline for dates and event fields.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
encoding:- Optional response decoding hint. Default: UTF-8.
- Configuration JSON:
- No extra configuration
Source Priority
Last Sync
29 May 2026, 10:54
Events
1
Active
+0
New
1
Ever
Interval (min)
Bandsintown
platform / failing
Configuration
- Source URL:
- Not configured
- Source type:
- platform
- Strategy:
- public-page
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Platform public page fallback
Fallback platform scraper that reuses the generic website connector until a platform-specific adapter exists.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:PlatformConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Requires a configured public URL.
- Uses the same candidate selection and extraction flow as the generic website scraper.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
- Configuration JSON:
- No extra configuration
Website source has no URL
Source Priority
Last Sync
26 May 2026, 17:32
Events
0
Active
+0
New
0
Ever
Interval (min)
Dice
platform / failing
Configuration
- Source URL:
- Not configured
- Source type:
- platform
- Strategy:
- public-page
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Platform public page fallback
Fallback platform scraper that reuses the generic website connector until a platform-specific adapter exists.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:PlatformConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Requires a configured public URL.
- Uses the same candidate selection and extraction flow as the generic website scraper.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
- Configuration JSON:
- No extra configuration
Website source has no URL
Source Priority
Last Sync
26 May 2026, 17:32
Events
0
Active
+0
New
0
Ever
Interval (min)
Eventbrite
platform / failing
Configuration
- Source URL:
- Not configured
- Source type:
- platform
- Strategy:
- public-page
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Platform public page fallback
Fallback platform scraper that reuses the generic website connector until a platform-specific adapter exists.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:PlatformConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Requires a configured public URL.
- Uses the same candidate selection and extraction flow as the generic website scraper.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
- Configuration JSON:
- No extra configuration
Website source has no URL
Source Priority
Last Sync
26 May 2026, 17:32
Events
0
Active
+0
New
0
Ever
Interval (min)
Resident Advisor
platform / healthy
Configuration
- Source URL:
- https://ra.co/events/fr/marseille
- Source type:
- platform
- Strategy:
- resident_advisor_graphql
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
Resident Advisor GraphQL
Dedicated Resident Advisor adapter using RA's public web GraphQL endpoint for Marseille listings and event-detail enrichment.
Strategy source file:apps/backend/app/connectors/resident_advisor.pyImplementation:ResidentAdvisorConnectorRuntime/feed URLs:
- Public Marseille listings:
- https://ra.co/events/fr/marseille
- GraphQL endpoint:
- https://ra.co/graphql
- Event details:
- Resident Advisor event(id) GraphQL queries and https://ra.co/events/{event_id} pages.
How it works:
- Queries Resident Advisor area 338, which RA identifies as Marseille.
- Paginates upcoming listings over a configurable future horizon and deduplicates repeated listing-day rows by stable RA event ID.
- Fetches event details with bounded concurrency and falls back to listing data when one detail request fails.
- Keeps only events whose venue area is explicitly Marseille.
- Treats RA start/end values as Europe/Paris local times and stores the interval as an event instance.
- Imports paragraph-preserved descriptions, original RA flyer images, venue/address, lineup, price, minimum age and ticket link.
- Exposes only RA genres as source taxonomies and uses attending count as the popularity score.
Supported configuration:
area_id:- Resident Advisor numeric area identifier. Marseille: 338.
max_items:- Maximum unique RA events enriched per sync. Default: 250.
page_size:- Listing rows requested per page, clamped to 1-100. Default: 50.
max_pages:- Maximum listing pages requested. Default: 10.
horizon_days:- Future listing horizon from the current Marseille day. Default: 365.
detail_concurrency:- Concurrent event-detail queries, clamped to 1-20. Default: 8.
graphql_url:- Optional endpoint override. Default: https://ra.co/graphql.
- Configuration JSON:
- { "area_id": 338, "max_items": 250, "page_size": 50, "max_pages": 10, "horizon_days": 365, "detail_concurrency": 8 }
Source Priority
Last Sync
7 Sept 2026, 14:23
Events
34
Active
+1
New
96
Ever
Interval (min)
Shotgun
platform / failing
Configuration
- Source URL:
- https://shotgun.live/fr/cities/aix-marseille
- Source type:
- platform
- Strategy:
- shotgun_parse_api
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Shotgun via Parse API
Dedicated Shotgun adapter using Parse.bot's maintained REST wrapper over Shotgun public data. It paginates and enriches the Aix-Marseille feed, then retains only events physically located in Marseille.
Strategy source file:apps/backend/app/connectors/shotgun.pyImplementation:ShotgunParseConnectorRuntime/feed URLs:
- Public city listings:
- https://shotgun.live/fr/cities/aix-marseille
- Event details:
- Parse get_event_detail calls followed by canonical https://shotgun.live/fr/events/{slug} links.
How it works:
- Authenticates with PARSE_API_KEY from the ignored .env file; the secret is never stored on the source row.
- Uses get_events with city=aix-marseille/-/ and follows page/has_more pagination.
- Calls get_event_detail for address, coordinates, schedule, images, performers and ticket offers.
- In incremental mode, skips detail calls for recently known listings and periodically refreshes them after the configured window.
- Requires explicit Marseille locality, address or postcode evidence after detail enrichment.
- Imports canonical Shotgun links, event images, prices, performers and normalized event instances.
- Creates daily instances only when separate ticket offers explicitly name at least two event dates.
- Exposes Shotgun tags under shotgun_genre for Admin Categories mapping.
- Paces requests according to the configured Parse plan to avoid HTTP 429 responses and excess credit use.
- Parse.bot is an independent paid wrapper, not an official Shotgun API; source health therefore depends on both services.
Supported configuration:
city:- Parse/Shotgun city slug. Default: aix-marseille/-/.
locality:- Required physical locality after detail enrichment. Default: Marseille.
physical_locality_only:- Require the configured locality/postcodes instead of the full city feed. Default: true.
max_items:- Maximum unique listings enriched per synchronization. Default: 50.
max_pages:- Maximum get_events pages requested. Default: 10.
requests_per_minute:- Parse request pace matching the account plan. Free: 5; Hobby: 20; Developer: 100.
incremental_detail_skip:- Skip detail calls for already imported listings while still checking listing pages. Default: true.
incremental_refresh_days:- Refresh already imported listings after this many days so date/ticket/image changes are eventually captured. Default: 30.
api_base:- Optional Parse scraper endpoint override for a pinned or private API copy.
- Configuration JSON:
- { "city": "aix-marseille/-/", "locality": "Marseille", "max_items": 50, "max_pages": 10, "requests_per_minute": 5, "physical_locality_only": true, "incremental_detail_skip": true, "incremental_refresh_days": 30 }
Parse Shotgun API returned HTTP 402
Source Priority
Last Sync
29 Aug 2026, 10:18
Events
68
Active
+0
New
68
Ever
Interval (min)
HelloAsso
platform / failing
Configuration
- Source URL:
- https://www.helloasso.com/e/recherche/activites?place_city=Marseille&place_department=Bouches-du-Rh%C3%B4ne
- Source type:
- platform
- Strategy:
- helloasso_algolia
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
HelloAsso public search
Dedicated HelloAsso adapter using the structured Algolia index behind the public Explore search, with strict current-event and physical-Marseille filtering.
Strategy source file:apps/backend/app/connectors/helloasso.pyImplementation:HelloAssoConnectorRuntime/feed URLs:
- Public Marseille search:
- https://www.helloasso.com/e/recherche/activites?place_city=Marseille&place_department=Bouches-du-Rh%C3%B4ne
- Structured search proxy:
- https://www.helloasso.com/algolia/1/indexes/*/queries
- Event pages and ticketing:
- Canonical https://www.helloasso.com/associations/{organization}/evenements/{event} URLs returned by the index.
- Official directory alternative:
- https://api.helloasso.com/v5/directory/forms (requires partner FormOpenDirectory privilege and is not used by this connector).
How it works:
- Reads the public page first and discovers its current public Algolia application ID, search key, proxy and production index dynamically.
- Does not require or persist a private HelloAsso credential.
- Requests only form_type=Event records whose end date is today or later and paginates the complete configured result set.
- Loads each canonical event page to read the event venue instead of trusting the association address exposed by the search index.
- Fails safely instead of reconciling a partial catalog when upstream results exceed max_items or max_pages.
- Requires explicit Marseille city/postcode evidence from the event page and rejects other or ambiguous locations.
- Imports exact UTC schedules, event venue/address, paragraph-preserved descriptions, full CDN banner/logo URLs, min/max price and participant popularity.
- Never treats the association headquarters coordinates in Algolia as event coordinates.
- Uses each canonical HelloAsso event URL as both source URL and Ticket/Billetterie destination.
- Exposes activity type, categories and public tags under helloasso_* taxonomies for Admin Categories mapping.
- The Explore Algolia contract is public but undocumented and may require connector maintenance if HelloAsso changes its frontend.
Supported configuration:
locality:- Required physical city. Default: Marseille.
department:- HelloAsso department filter. Default: Bouches-du-Rhone.
physical_locality_only:- Documents strict Marseille admission. Default: true.
max_items:- Maximum complete current/upcoming catalog size. Default: 1000.
page_size:- Records requested per search page, clamped to 1-100. Default: 100.
max_pages:- Maximum complete search pages. Default: 10.
detail_concurrency:- Concurrent canonical event-page validations, clamped to 1-20. Default: 10.
detail_requests_per_second:- Maximum paced canonical detail requests per second. Default: 5.
browser_impersonation:- curl-cffi browser profile used for the Cloudflare-protected public page. Default: safari17_0.
timeout_seconds:- Per-request timeout, clamped to 5-120 seconds. Default: 30.
algolia_proxy:- Optional structured-search proxy override.
index_name:- Optional index override. Default: prod_activities.
- Configuration JSON:
- { "locality": "Marseille", "department": "Bouches-du-Rhone", "physical_locality_only": true, "max_items": 1000, "page_size": 100, "max_pages": 10, "browser_impersonation": "safari17_0", "detail_concurrency": 10, "detail_requests_per_second": 5 }
HelloAsso public search API returned HTTP 429
Source Priority
Last Sync
6 Sept 2026, 19:05
Events
296
Active
+0
New
388
Ever
Interval (min)
Songkick
platform / failing
Configuration
- Source URL:
- Not configured
- Source type:
- platform
- Strategy:
- public-page
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Platform public page fallback
Fallback platform scraper that reuses the generic website connector until a platform-specific adapter exists.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:PlatformConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Requires a configured public URL.
- Uses the same candidate selection and extraction flow as the generic website scraper.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
- Configuration JSON:
- No extra configuration
Website source has no URL
Source Priority
Last Sync
26 May 2026, 17:32
Events
0
Active
+0
New
0
Ever
Interval (min)
Tarpin Bien
website / healthy
Configuration
- Source type:
- website
- Strategy:
- tarpin_bien_wordpress
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Tarpin Bien WordPress/Schema.org
Dedicated Tarpin Bien adapter using the bounded upcoming-event index, Schema.org detail records and the public WordPress REST API for taxonomies and original featured media.
Strategy source file:apps/backend/app/connectors/tarpin_bien.pyImplementation:TarpinBienConnectorRuntime/feed URLs:
- Public event search:
- https://tarpin-bien.com/recherche/?evenementCheck=1&pageEvenement={page}&show=evenement
- WordPress event API:
- https://tarpin-bien.com/wp-json/wp/v2/evenement
- Event details:
- Individual https://tarpin-bien.com/evenement/{slug}/ pages discovered from the upcoming index.
How it works:
- Paginates only the public current/upcoming event results instead of traversing the full historical WordPress collection.
- Fetches detail pages with bounded concurrency and reads their Schema.org Event subtypes.
- Treats the published event clock values as Europe/Paris wall time because the site labels them +0000 while rendering the same local clock time.
- Requires explicit Marseille locality or a Marseille 13000/13001-13016 postcode and rejects Aix, Cassis, Martigues and other regional listings.
- Imports paragraph-preserved descriptions, date instances, venue/address, coordinates, direct ticket links, prices and original images.
- Uses bounded WordPress REST batches to enrich categorie-evenement/tag-evenement taxonomies and original featured media.
Supported configuration:
max_items:- Maximum event detail pages to inspect per sync. Default: 250.
max_pages:- Maximum upcoming-result pages to request. Default: 20.
detail_concurrency:- Concurrent event-detail requests, clamped from 1 to 20. Default: 8.
locality:- Documented admission scope; this connector is intentionally fixed to Marseille.
physical_locality_only:- Documents strict physical-Marseille admission. Default: true.
- Configuration JSON:
- { "max_items": 250, "max_pages": 20, "detail_concurrency": 8, "locality": "Marseille", "physical_locality_only": true }
Source Priority
Last Sync
16 Aug 2026, 15:40
Events
147
Active
+0
New
147
Ever
Interval (min)
Sortir a Marseille
website / unknown
Configuration
- Source URL:
- https://www.sortiramarseille.fr/tout-l-agenda
- Source type:
- website
- Strategy:
- http
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Generic website scraper
Generic public-page scraper for simple website sources.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:WebsiteConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Downloads the configured public URL.
- Selects article/event-like HTML nodes.
- Builds raw event candidates from visible text and the first link.
- Relies on the shared extraction pipeline for dates and event fields.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
encoding:- Optional response decoding hint. Default: UTF-8.
- Configuration JSON:
- No extra configuration
Source Priority
Last Sync
Never
Events
0
Active
+0
New
0
Ever
Interval (min)
Time Out Marseille
website / unknown
Configuration
- Source URL:
- https://www.timeout.fr/marseille
- Source type:
- website
- Strategy:
- http
- Encoding:
- Default (UTF-8)
- Enabled:
- No
- Strategy details
Generic website scraper
Generic public-page scraper for simple website sources.
Strategy source file:apps/backend/app/connectors/websites.pyImplementation:WebsiteConnectorRuntime/feed URLs:
- Configured public page:
- The source URL configured on the source row.
How it works:
- Downloads the configured public URL.
- Selects article/event-like HTML nodes.
- Builds raw event candidates from visible text and the first link.
- Relies on the shared extraction pipeline for dates and event fields.
Supported configuration:
selectors:- Optional CSS selectors to find event candidate nodes.
max_items:- Maximum candidate nodes to inspect. Default: 25.
encoding:- Optional response decoding hint. Default: UTF-8.
- Configuration JSON:
- No extra configuration
Source Priority
Last Sync
Never
Events
0
Active
+0
New
0
Ever
Interval (min)
ateliersjeannebarret
instagram / healthy
Configuration
- Source URL:
- https://www.instagram.com/ateliersjeannebarret/
- Source type:
- Strategy:
- instagrapi
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
Instagram instagrapi
Authenticated Instagram private-API strategy selected through config/instagram_connectors.json.
Strategy source file:apps/backend/app/connectors/instagram.pyImplementation:InstagramConnectorRuntime/feed URLs:
- Instagram profile:
- The configured instagram.com account URL.
- Instagram private API:
- instagrapi-managed endpoints; exact URLs are not stored in Planet Mars config.
How it works:
- Loads non-secret strategy selection from config/instagram_connectors.json.
- Uses credentials or a persisted session from ignored .env/storage values.
- Fetches recent public account posts and complete carousel image sets.
- Reads the current profile grid once per sync, then sends only new or changed posts to image download, OCR and OpenAI extraction.
- Records successfully analyzed posts even when they contain no event, preventing repeated token spend on non-event posts.
- Runs enabled local PaddleOCR per slide, then sends caption, OCR and images to the source-selected OpenAI model.
- Imports only validation-ready future Marseille events through the normal deduplication and visibility pipeline.
- Caches extraction by account, post content, prompt version and model so unchanged posts do not spend OpenAI tokens again.
Supported configuration:
default_strategy:- Global Instagram strategy in config/instagram_connectors.json.
sources.<account>.strategy:- Per-account strategy override.
openai_model:- Multimodal extraction model selected per Instagram source.
instagram_options.post_limit:- Latest profile posts checked for new or changed content per synchronization, from 1 to 50. Default for new sources: 20.
instagram_account_type:- Venue, organizer, or mixed account behavior.
instagram_default_venue:- Verified fixed venue used only by venue accounts.
instagram_default_address:- Verified Marseille address used only by venue accounts.
- Configuration JSON:
- { "openai_model": "gpt-5.6-luna", "instagram_options": { "post_limit": 20 }, "instagram_account_type": "venue", "instagram_default_venue": "Atelier Jeanne Barret", "instagram_default_address": "5 Bd de Sévigné, Marseille, France 13015" }
Source Priority
Last Sync
6 Sept 2026, 20:04
Events
2
Active
+0
New
2
Ever
Interval (min)
la_comerie
instagram / healthy
Configuration
- Source URL:
- https://www.instagram.com/la_comerie/
- Source type:
- Strategy:
- instagrapi
- Encoding:
- Default (UTF-8)
- Enabled:
- Yes
- Strategy details
Instagram instagrapi
Authenticated Instagram private-API strategy selected through config/instagram_connectors.json.
Strategy source file:apps/backend/app/connectors/instagram.pyImplementation:InstagramConnectorRuntime/feed URLs:
- Instagram profile:
- The configured instagram.com account URL.
- Instagram private API:
- instagrapi-managed endpoints; exact URLs are not stored in Planet Mars config.
How it works:
- Loads non-secret strategy selection from config/instagram_connectors.json.
- Uses credentials or a persisted session from ignored .env/storage values.
- Fetches recent public account posts and complete carousel image sets.
- Reads the current profile grid once per sync, then sends only new or changed posts to image download, OCR and OpenAI extraction.
- Records successfully analyzed posts even when they contain no event, preventing repeated token spend on non-event posts.
- Runs enabled local PaddleOCR per slide, then sends caption, OCR and images to the source-selected OpenAI model.
- Imports only validation-ready future Marseille events through the normal deduplication and visibility pipeline.
- Caches extraction by account, post content, prompt version and model so unchanged posts do not spend OpenAI tokens again.
Supported configuration:
default_strategy:- Global Instagram strategy in config/instagram_connectors.json.
sources.<account>.strategy:- Per-account strategy override.
openai_model:- Multimodal extraction model selected per Instagram source.
instagram_options.post_limit:- Latest profile posts checked for new or changed content per synchronization, from 1 to 50. Default for new sources: 20.
instagram_account_type:- Venue, organizer, or mixed account behavior.
instagram_default_venue:- Verified fixed venue used only by venue accounts.
instagram_default_address:- Verified Marseille address used only by venue accounts.
- Configuration JSON:
- { "openai_model": "gpt-5.6-luna", "instagram_options": { "post_limit": 20 }, "instagram_account_type": "venue", "instagram_default_venue": "La Comerie", "instagram_default_address": "176 Rue Breteuil, 13006 Marseille" }
Source Priority
Last Sync
7 Sept 2026, 08:21
Events
22
Active
+22
New
22
Ever
Interval (min)