expedia.com
Summary
Expedia is a travel website offering vacation homes, hotels, car rentals, flights, and more. It provides options to bundle stays with car rentals or flights for savings and features various travel deals and promotions.
Associated Brands
IAB Categories
TravelShopping
IAB Ad Products
Travel and TourismTravel Agents and Online Travel ServicesTravel Packages
Tags

Creatives
| ID | Domain | Seat | Bid | Timestamp | Status | Ad Format | Sub Format | Size | Quality Score | Data Transferred | Computational Cost |
|---|---|---|---|---|---|---|---|---|---|---|---|
| cm861i | 34231 | $0.90 | 3/12/2025, 2:53:47 PM | Domain Capture: Success Ad Rendering: Success Brand Mapping: Success Ad Analysis: Pending Domain Analysis: Pending | banner | - | 300x250 | N/A | 1259.11 KB | 14647.00 ms | |
| cm861i | 34231 | $0.90 | 3/12/2025, 2:53:47 PM | Domain Capture: Success Ad Rendering: Success Brand Mapping: Success Ad Analysis: Failed: PrismaClientKnownRequestError:
Invalid `s.chat.completions.create()` invocation in
/var/task/dist/index.js:178:3157
175 Return the structured classification JSON as per the format.
176 `}};function k(e,a){let n=e==="creative"?Z.SUMMARY_TEXT:ee.SUMMARY_TEXT,i=!a||a.trim()===""?"NONE":a.substring(0,5e3);return{SYSTEM:n.SYSTEM,USER:`${n.USER}
177
→ 178 ${i}`}}var E=async(e,a,n,i,t,s)=>{try{let g=(await s.chat.completions.create(
An operation failed because it depends on one or more records that were required but not found. Expected 2 records to be connected, found only 0. Domain Analysis: Failed: PrismaClientKnownRequestError:
Invalid `e.domain.findUnique()` invocation in
/var/task/dist/index.js:180:1316
177
178 ${i}`}}var E=async(e,a,n,i,t,s)=>{try{let g=(await s.chat.completions.create({...b,messages:[{role:"system",content:e.SYSTEM},{role:"user",content:[{type:"text",text:e.USER(a,n,i,t)}]}],response_format:{type:"json_schema",json_schema:{name:"contentClassification",description:"A structured JSON object containing an array of classified categories with confidence scores.",strict:!0,schema:{type:"object",properties:{classifications:{type:"array",items:{type:"object",properties:{category:{type:"string",description:"The assigned IAB or sensitive content category."},confidence:{type:"number",description:"The confidence score of the classification (0.0 - 1.0)."}},required:["category","confidence"],additionalProperties:!1}}},required:["classifications"],additionalProperties:!1}}}})).choices[0].message.content;if(!g)return[];let c=JSON.parse(g);return!c||!c.classifications||!Array.isArray(c.classifications)?[]:c.classifications.every(u=>typeof u.category=="string"&&typeof u.confidence=="number")?c.classifications:[]}catch(l){return console.error("Error in classifyContent:",l),[]}};async function v({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.IAB,e,a,n,i,t);return console.log("IAB Classification: ",s),s}async function A({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.IAB_AD_PRODUCT,e,a,n,i,t);return console.log("IAB Ad Product Classification: ",s),s}async function I({type:e,summary:a,textFromImage:n,adomain:i,openai:t}){let s=await E(C.SENSITIVE,e,a,n,i,t);return console.log("Sensitive Classification: ",s),s}async function te(e){let n=await(await fetch(e)).text();return n||(console.error(`Error getting HTML for ${e}`),"")}async function P(e,a,n,i="creative"){console.log("getting text and summary for type: ",i);let t=await te(a),s=k(i,t);console.log("Prompts: ",s);let l=[{type:"text",text:s.USER},{type:"image_url",image_url:{url:e}}],c=(await n.chat.completions.create({...b,messages:[{role:"system",content:s.SYSTEM},{role:"user",content:l}],response_format:{type:"json_schema",json_schema:{name:"extractedTextAndSummary",description:"A structured JSON object with extracted text and summary.",strict:!0,schema:{type:"object",properties:{extractedText:{type:"array",items:{type:"string"},description:"An array of strings, each representing a text element extracted from the image."},summary:{type:["string","null"],description:"A brief summary of the image."}},required:["extractedText","summary"],additionalProperties:!1}}}})).choices[0].message.content;if(!c)return{extractedText:[],summary:""};try{let r=JSON.parse(c);return console.log("Summary and text response-: ",i,r),r}catch(r){return console.error("Error parsing JSON response:",r,c),{extractedText:[],summary:""}}}var w=require("@aws-sdk/client-s3"),x=require("@aws-sdk/s3-request-presigner");var G=async(e,a,n)=>{let i=await e.creative.findUnique({where:{id:a},include:{auditResult:!1}});if(!i)throw console.error("Creative not found",a),new Error("Creative not found");console.log("Creative: ",i);let t=await ne({data:{creative:i,adomain:i.adomain},s3:n});return console.log("Creative analysis result:",t),await e.creative.update({where:{id:i.id},data:{summary:t.summary,iabCategories:{connect:t.iabCategoriesCodes.map(s=>({code:s.category}))},iabProducts:{connect:t.iabAdProductIds.map(s=>({id:s.id}))},tags:{connect:t.foundSensitiveTags.map(s=>({name:s.category}))}}}),t};async function ne({data:e,s3:a}){console.log("Analyzing with OpenAI:",e.creative.id);let n="creative",i=new U.default({apiKey:process.env.OPENAI_API_KEY}),{summary:t,textFromImage:s}=await ae(e,i,a),l=await v({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),g=await A({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),c=await I({type:n,summary:t,textFromImage:s,adomain:e.adomain,openai:i}),r=[];for(let[o,m]of Object.entries(S)){let d=l.find(p=>m.includes(p.category));d&&r.push({category:o,confidence:d.confidence})}let u=[];for(let[o,m]of Object.entries(f)){let d=g.find(p=>m===p.category);d&&u.push({id:parseInt(o),confidence:d.confidence})}return{iabCategoriesCodes:r.filter(o=>o.confidence>=.7),iabAdProductIds:u.filter(o=>o.confidence>=.5),foundSensitiveTags:c,summary:t}}async function ae(e,a,n){console.log("Getting summary and text from creative image:",e.creative.id);let i=null,t=[],s=null;if(e.creative.ad_format==="native"){let r=null,u=JSON.parse(JSON.parse(e.creative.raw_json).adm);for(let o=0;o<u.native.assets.length;o++){let m=u.native.assets[o];if(m.data&&m.data.value&&t.push(m.data.value),m.img&&m.img.url){let d=m.img.w*m.img.h;(!r||d>r.resolution)&&(r={url:m.img.url,resolution:d})}}if(r)i=r.url;else throw new Error("No image found in native creative")}t.length>0&&(s=`
179 (Parsed text from native assets: ${t.join(`
→ 180 - `)})`),i||(console.log("Getting non-native creative image URL"),i=await ie(e,n));let l=await se(e,n);console.log("Img URL: ",i),console.log("Html URL: ",l);let{summary:g,textFromImage:c}=await P(i,l,a,"creative");return{summary:`${g}${s}`,textFromImage:c}}async function ie(e,a){let n=`ads/${e.creative.id}/screenshot_0.jpg`,i=new w.GetObjectCommand({Bucket:process.env.R2_BUCKET||"",Key:n});try{return await(0,x.getSignedUrl)(a,i,{expiresIn:3600})}catch(t){console.error("Error getting creative image URL:",t)}return`${process.env.CDN_URL}/ads/${e.creative.id}/screenshot_0.jpg?${Math.random().toString(36).substring(2,15)}`}var se=async(e,a)=>{let n=`ads/${e.creative.id}/index.html`,i=new w.GetObjectCommand({Bucket:process.env.R2_BUCKET||"",Key:n});return await(0,x.getSignedUrl)(a,i,{expiresIn:3600})};var N=B(require("openai"));var R=require("@aws-sdk/client-s3"),D=require("@aws-sdk/s3-request-presigner");var L=async(e,a,n,i)=>{let t=null;if(n?t=await e.domain.findUnique(
An operation failed because it depends on one or more records that were required but not found. Expected 3 records to be connected, found only 0. | banner | - | 300x250 | N/A | 1304.20 KB | 13772.00 ms | |
| cm861i | 34231 | $0.90 | 3/12/2025, 2:53:47 PM | Ad Analysis: Success Domain Analysis: Success Domain Capture: Success Ad Rendering: Success Brand Mapping: Success | banner | - | 728x90 | 6/10 | 724.24 KB | 12700.00 ms |