
Analyze Travel Url
- 1 installs
- Updated August 4, 2026
- coolbeardcool-lang/travel-reels-trip-planner
Analyze travel URLs and destination information for trip planning.
About
Travel URL parser and destination analyzer for building personalized trip plans. Extracts location data and creates structured itineraries from travel links.
- Travel URL parsing and destination extraction
- Structured itinerary generation from links
Analyze Travel Url by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,983 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/coolbeardcool-lang/travel-reels-trip-planner --skill analyze-travel-urlAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | August 4, 2026 |
| Repository | coolbeardcool-lang/travel-reels-trip-planner ↗ |
What it does
Analyze travel URLs and destination information for trip planning.
Files
Analyze Travel URL
Use this skill when the input is a travel-related URL and the goal is to turn it into structured records for this project.
This project already has:
functions/api/analyze-url.jsfor URL analysisfunctions/api/confirm-analysis.jsfor confirmed Notion write-back
Read these supporting files before deciding the final output:
notion-field-mapping.mdoutput-schema.mdextraction-checklist.md
Use examples.md when the source contains multiple places, mixed spot/event content, or weak evidence.
Input
Primary input: $ARGUMENTS
If $ARGUMENTS is empty, use the URL provided in the current user request.
Goal
Produce a structured analysis result that: 1. aligns with the project's current analysis model 2. expands multiple places into separate items 3. distinguishes source-level information from item-level information 4. recommends whether the result should go to:
- Notion Sources
- Notion Spots
- Notion Events
- quick-access notes
- handoff notes
Required working order
Step 1: Identify source type
Classify the URL as one of:
- short-form video
- article / blog
- event page
- map / directory page
- weak-information page
Step 2: Collect evidence
Prefer evidence in this order: 1. structured page metadata 2. captions / subtitles 3. audio transcript 4. visible text in frames 5. title / description / user notes
If tool-assisted audio or visual extraction is unavailable in the current environment, explicitly mark the extraction as partial and continue with metadata plus notes.
Never pretend audio or visual evidence exists when it does not.
Step 3: Extract source-level facts
Extract:
- source title
- source platform
- probable city slug
- probable area
- overall content kind
- source credibility
- concise summary
- whether review is required
Step 4: Extract candidate items
Identify candidate places or events mentioned in the URL content.
For each candidate item, extract:
- name
- item kind
- category
- description
- tags
- city slug
- area
- best time or dates
- estimated stay or event duration clues
- map / official URL if available
- evidence
- source credibility
- item confidence
- review reason if uncertain
Step 5: Expand multiple locations
If a single source contains multiple places, create one item per place.
Rules:
- do not merge different places into one record
- do not collapse multiple restaurants into a single “food list” item
- if the source mixes places and events, keep them as separate items
- if the source mentions an itinerary order, preserve that order in reasoning notes
Step 6: Decide write targets
Always prepare:
- one source-level object
- zero or more item-level objects
Recommend write targets as follows:
notion_source: always, unless the URL is invalid or unusablenotion_spot: when an item is a stable place or storenotion_event: when an item is date-bound or clearly an eventquick_access: only when the source reveals a reusable rule, repeated extraction pattern, or structural learning worth preservinghandoff: when ambiguity remains, manual review is needed, or follow-up enrichment is required
Step 7: Recommend schema updates only when necessary
If the current project schema cannot faithfully represent the source, recommend the smallest useful schema change.
Prefer additive fields over renaming existing fields.
Output contract
Return five sections in this order:
1. extraction_summary 2. source_record 3. items 4. write_recommendations 5. schema_recommendations
Hard rules
- Split multiple locations into separate items.
- Do not invent coordinates, dates, or official URLs.
- If evidence is weak, set review flags rather than fabricating certainty.
- Use current project field names unless explicitly proposing schema upgrades.
- If the source is too weak to support item creation, return
source_only.
Examples
Example 1: one reel, three cafes
Input
Instagram reel showing:
- Cafe A interior
- Cafe B dessert
- Cafe C exterior sign
Caption mentions "京都咖啡三選"
Expected handling
- classify source as
short_video - classify overall
content_kindasspot - create one source record
- create three separate spot items
- each cafe gets its own:
nameitem_kind=spotcategory=咖啡descriptiontagsareabest_timestay_minutesevidencewrite_targets=["notion_spot"]
Wrong handling
- one combined item called "京都咖啡三選"
---
Example 2: one short video mixing a market and a seasonal event
Input
Video mentions:
- local night market
- weekend flower festival
- event date shown in video text
Expected handling
- one source record
- one spot item for the market
- one event item for the flower festival
- market ->
write_targets=["notion_spot"] - festival ->
write_targets=["notion_event"] - if date text is partly unclear, set
needs_review=trueand keep the observed evidence
---
Example 3: weak source with only a title and no clear place
Input
A URL with title like "Tokyo hidden gems" No readable description No extractable place names No notes
Expected handling
content_kind="source_only"- no item creation
- source record only
- recommend
handoffif user may need manual completion
---
Example 4: article listing five restaurants with districts
Input
Blog article with five restaurant headings and district names
Expected handling
- source type =
article - content kind =
spot - one source record
- five separate spot items
- item order should follow article order
- use district names as
area - if map links exist, retain them
Extraction Checklist
Use this checklist before finalizing the structured result.
A. Source validation
- Is the URL valid and reachable?
- Is the source actually travel-related?
- Is there enough information to support item extraction?
- If not, should it remain
source_only?
B. Evidence collection
- Page title collected
- Meta description collected
- OG title / description collected
- User notes considered
- Captions / subtitles available
- Audio transcript available
- Visible text from frames available
- Dates / venue names / district names identified
- Unsupported evidence explicitly marked as unavailable
C. Source-level analysis
- Source title normalized
- Platform identified
- Overall content kind chosen
- City slug inferred or left null
- Area inferred or left null
- Confidence set
- Review flag set
- Summary written
D. Item expansion
- All distinct places expanded into separate items
- Mixed place/event content separated
- Duplicates merged only when truly the same entity
- Each item has at least:
- name
- category
- description
- city_slug or null
- area or null
- evidence
- confidence
- review flag
E. Write target decision
- Source-level record marked for
notion_source - Stable locations marked for
notion_spot - Date-bound items marked for
notion_event - Reusable extraction pattern marked for
quick_access - Ambiguous / incomplete result marked for
handoff
F. Guardrails
- No invented dates
- No invented coordinates
- No invented official URLs
- No merged multi-location record
- No false certainty from weak evidence
Notion Field Mapping
This project currently writes confirmed analysis results into separate Notion data sources.
1) Source-level record
Use for every analyzed URL.
Target
Notion Sources data source
Current field mapping
Name<- short display title derived from city + summary or platform + kindSourceUrl<- normalized source URLPlatform<- source platformSourceType<- "活動資訊" | "景點美食" | "手動整理"Status<- current workflow statusNote<- user notes or summaryCityHints<- inferred city slug(s)Published<- boolean
Skill-side source object fields
Use these field names in the analysis result:
source_titlesource_platformcontent_kindcity_slugareaconfidenceneeds_reviewsummarysource_credibilityreview_reasonwrite_targets
2) Spot-level item
Use when the item is a stable place, venue, restaurant, cafe, shopping point, temple, museum, etc.
Target
Notion Spots data source
Current field mapping
Name<- item nameArea<- area or fallback city labelBestTime<- best visit timeCategory<- categoryCity<- city labelCitySlug<- city slugDescription<- short descriptionLat<- coordinateLng<- coordinateMapUrl<- map linkNotes<- reason / analyst notePublished<- booleanStayMinutes<- stay estimateTags<- joined tagsThumbnail<- emoji thumbnail
Skill-side spot item fields
nameitem_kind=spotcategorydescriptiontagscity_slugareabest_timestay_minuteslatlngmap_urlthumbnailsource_credibilityitem_confidenceneeds_reviewreview_reasonevidencereason
3) Event-level item
Use when the item is date-bound, ticketed, time-limited, or clearly an event.
Target
Notion Events data source
Current field mapping
Name<- item nameArea<- areaCategory<- categoryCity<- city labelCitySlug<- city slugDescription<- short descriptionStartTimeText<- start timeEndTimeText<- end timeStartsOn<- start dateEndsOn<- end dateLat<- coordinateLng<- coordinateMapUrl<- map linkOfficialUrl<- official or source URLPriceNote<- price notePublished<- booleanRecurringType<- default recurrenceStatus<- workflow statusTags<- joined tagsTicketType<- ticket modeVenueName<- venue name
Skill-side event item fields
nameitem_kind=eventcategorydescriptiontagscity_slugareastarts_onends_onstart_timeend_timeprice_noteticket_typevenue_namelatlngmap_urlofficial_urlthumbnailsource_credibilityitem_confidenceneeds_reviewreview_reasonevidencereason
4) Current model gap to be aware of
The existing backend already supports:
- source-level
contentKind - item arrays
- spot/event-specific item properties
- Notion write-back by content kind
However, current analysis output should ideally be extended with:
item_kindsource_credibilityitem_confidenceevidencereview_reason
Recommend these only when needed. Do not force a schema rewrite if the current task can be completed safely without them.
Output Schema
Return the result in JSON-like structure using the following shape.
Top-level object
{
"extraction_summary": {
"source_type": "short_video | article | event_page | map_page | weak_information",
"extraction_mode": "audio_visual | metadata_only | metadata_plus_notes | mixed",
"source_credibility": "high | medium | low",
"overall_confidence": 0.0,
"needs_review": true,
"review_reason": "string"
},
"source_record": {
"source_title": "string",
"source_platform": "Instagram | Threads | Facebook | YouTube | TikTok | Website",
"content_kind": "spot | event | source_only",
"city_slug": "string or null",
"area": "string or null",
"confidence": 0.0,
"needs_review": true,
"summary": "string",
"source_credibility": "high | medium | low",
"review_reason": "string",
"write_targets": ["notion_source"]
},
"items": [],
"write_recommendations": [],
"schema_recommendations": []
}
{
"name": "string",
"item_kind": "spot | event | source_only",
"category": "string",
"description": "string",
"tags": ["string"],
"city_slug": "string or null",
"area": "string or null",
"best_time": "string or null",
"stay_minutes": 0,
"starts_on": "YYYY-MM-DD or null",
"ends_on": "YYYY-MM-DD or null",
"start_time": "HH:MM or empty",
"end_time": "HH:MM or empty",
"price_note": "string or null",
"ticket_type": "string or null",
"venue_name": "string or null",
"lat": 0,
"lng": 0,
"map_url": "string or null",
"official_url": "string or null",
"thumbnail": "emoji or null",
"source_credibility": "high | medium | low",
"item_confidence": 0.0,
"needs_review": true,
"review_reason": "string",
"evidence": [
{
"type": "audio | visual_text | caption | title | description | metadata | note",
"value": "string"
}
],
"reason": "string",
"write_targets": ["notion_spot"]
}
{
"target": "notion_source | notion_spot | notion_event | quick_access | handoff",
"scope": "source | item",
"name": "source title or item name",
"why": "string"
}
{
"field": "string",
"level": "source | item",
"reason": "string",
"priority": "high | medium | low"
}