Research Newmark Merrill Property Detail Pages

Site newmarkmerrill.comTask research-property-detail-page-structureVersion v1Updated Jul 30, 2026Category real-estate

Extract structured property metadata, market facts, contacts, tenants, assets, and gallery information from Newmark Merrill property detail pages. This skill was captured from a live agent session on newmarkmerrill.com and publishes here verbatim, exactly as an agent receives it.

NoteSelectors and URL schemes drift as sites change. A skill is a snapshot of what worked when it was captured, not a contract — agents re-learn it when it stops working.

Purpose

Retrieve the structured content exposed on a Newmark Merrill commercial property detail page, including the title, address, property facts, leasing contact, tenant logos, downloadable assets, gallery images, and traffic information.

When to Use

Use for a known Newmark Merrill property detail URL or property slug. The site uses the stable URL pattern https://newmarkmerrill.com/property/{property-slug}/.

Workflow

  1. Build the direct URL as https://newmarkmerrill.com/property/{property-slug}/ and navigate to it.
  2. In the same browser call, run this evaluator on the loaded page:
(() => {
  const text = (el) => el?.innerText?.trim() || null;
  const field = (label) => {
    const heading = [...document.querySelectorAll("h2.heading-5")].find((h) =>
      text(h)?.toLowerCase().includes(label.toLowerCase()),
    );
    const li = heading?.closest("li");
    if (!li) return null;
    const value = text(li)?.replace(new RegExp(label, "i"), "").trim();
    return value || null;
  };
  const href = (selector) => document.querySelector(selector)?.href || null;
  return {
    url: location.href,
    title: text(document.querySelector("h1.entry-title, h1")),
    address:
      text(document.querySelector(".entry-header .fa-ul li.lead")) ||
      text(
        document.querySelector(
          ".address, .property-address, .center-address, [class*=address]",
        ),
      ),
    intersection: field("Intersection"),
    description: (() => {
      const heading = [...document.querySelectorAll("h2.heading-5")].find((h) =>
        text(h)?.toLowerCase().includes("description"),
      );
      return (
        text(heading?.closest("li")?.querySelector("ul")) ||
        text(heading?.closest("li"))
      );
    })(),
    sqft: field("SQFT"),
    population: field("Population"),
    dailyTraffic: field("Daily Traffic"),
    householdIncome: field("Household Income"),
    leasingContact: field("Leasing Contact"),
    phone: field("Phone"),
    email:
      document.querySelector('a[href^="mailto:"]')?.href?.replace(/^mailto:/, "") ||
      null,
    categories: field("Categories"),
    tenants: [...document.querySelectorAll(".tenant-container img")]
      .map((img) => (img.alt || "").replace(/ logo/gi, "").trim())
      .filter(Boolean),
    galleryImages: [...document.querySelectorAll(".jld-slide-slideshow img")]
      .map((img) => ({ src: img.src || null, alt: img.alt || null }))
      .filter((img) => img.src),
    sitePlan: href('a[href*="site-plan"]'),
    brochure: href('a[href*="brochure"], a[href*="Brochure"], a[href*="rochure"]'),
    customerTraffic: text(document.querySelector(".customer-counter")),
    headings: [...document.querySelectorAll("h2, h3")]
      .map((h) => ({
        level: h.tagName.toLowerCase(),
        text: text(h),
        className: h.className || null,
      }))
      .filter((x) => x.text),
  };
})();

Site-Specific Gotchas

  • Property pages are WordPress-style routes under /property/{property-slug}/; the slug is generally supplied by the caller or URL and should not be guessed from an opaque identifier.
  • Core property facts are represented as h2.heading-5 headings inside list items. Read the containing li, rather than only the heading or its immediate sibling.
  • The address is normally the lead item under .entry-header .fa-ul; generic address-class fallbacks are useful when the theme varies.
  • Tenant names are encoded in the alt attributes of images under .tenant-container, not necessarily as visible text nodes.
  • Gallery images use .jld-slide-slideshow img. Download links may contain site-plan or brochure in their URL, but should be treated as optional because not every property provides both.
  • Leasing email may appear in a general mailto link or in the leasing/contact section; return the first available mailto: address.
  • Some fields and sections are optional. Preserve missing values as null or empty arrays rather than inferring them from nearby text.

Expected Output

Return one object containing the property URL, title, address, market/property facts, contact details, tenant names, gallery image URLs and alt text, optional site-plan and brochure URLs, customer-traffic text, and a heading inventory that exposes the page's section structure.

Call it

GET https://production-sfo.browserless.io/skills?token=TOKEN-HERE&domain=newmarkmerrill.com&task=research-property-detail-page-structure