$7,500/mo
4 Beds
4 Baths
Available: Now
Dover, MA
107 Farm St, Dover, MA 02030
Listing courtesy of Mary Crane, Berkshire Hathaway HomeServices Commonwealth Real Estate
Property Description
Picturesque 4BR 3.5BA home on 2 landscaped acres perfectly set off coveted Farm Street. The first floor of this 4100 sf home offers a primary bedroom and newly renovated bath, newly renovated eat-in kitchen w/brand new appliances, dining room, fireplaced living room, a sun-splashed family room w/a stone fireplace, cathedral ceiling, skylights and a wall of windows with amazing views. Three bedrooms and 2 renovated baths complete the second floor. Wonderful finished lower level. Laundry on 1st floor, attached 3 car garage. Landscaping included. Abuts DLCT land. The charming town of Dover is located 15 miles SW of Boston, enjoys a low tax rate & top schools.
Show more
Price Comparison
This apartment is above the average price of $5,500 for 4 bedroom apartments in Dover. The unit includes some utilities. If you consider the cost of paying for these utilities separately, you may find that having them included in the rent saves you money. The other amenities this apartment offers, along with its condition, location, and size, can also contribute to the above average rent price. Contact us about this great unit before it's gone!
Average Rent Prices for 4 Bedroom Apartments in Dover
');}else{$("#"+chart_id).append('
');}if(value.multiaxis_combined === true){var ctx = document.getElementById(tabId).getContext("2d");var chartDataMultiAxis = value.multiaxis;const correctedMultiaxis = value.multiaxis.replace(/\n/g, "").replace(/\t/g, "").replace(/\/\/.*/g, "").replace(/,\s*}/g, "}").replace(/,\s*]/g, "]");const multiaxisObject = eval("(" + value.multiaxis + ")");var mmObj = {type: multiaxisObject.type,data: multiaxisObject.data,options: multiaxisObject.options};let abcM;if (value.annotation) {try {abcM = JSON.parse(value.annotation);} catch (error) {// alert("Error parsing annotation JSON:" + value.annotation);}}if (value.annotation) {abcM = JSON.parse(value.annotation);}// Add the parsed annotations to the chart optionsif (abcM) {if (!mmObj.options) {mmObj.options = {};}mmObj.options.annotation = {drawTime: abcM.annotation.drawTime,events: abcM.annotation.events,annotations: abcM.annotation.annotations};}const myChart = new Chart(ctx, mmObj);if ($("#" + ctabId + " table").length === 0) {if(value.wcag_table!=undefined){const tableHtml = genrateJsonTableMultiAxis(value.wcag_table);$("#" + ctabId).append(tableHtml);}}}else{var ctx = document.getElementById(tabId).getContext("2d");if(value.data_label!=undefined){var chartData = parseChartData(value);new Chart(ctx, chartData);}if ($("#" + ctabId + " table").length === 0) {// Add table generation code under chart starts from here const tableHtml = generateTableFromJSON(value.wcag_table);$("#" + ctabId).append(tableHtml);}}}else{$.each(globalJsonData, function(key, value) {var randomInt = getRandomInt(1, 1000);const tabId = "charts_tabs-" + key+"_"+randomInt;const ctabId = "charts_tab-" + key+"_"+randomInt;$(".err_chart_"+chart_number).append(value.annotation_error);const parentDiv = $("#"+chart_id);const childDiv = $("#" + chart_id).parent().find(".charts_tabs");const ulElement = childDiv.find("#mylist");ulElement.append('
');childDiv.append('
');var new_name = "charts_tabs-"+key+"_"+randomInt;;var ctx = document.getElementById(new_name).getContext("2d");var chartData = parseChartData(value);new Chart(ctx, chartData);counter++;if ($("#" + ctabId + " table").length === 0) {// Add table generation code under chart starts from here const tableHtml = generateTableFromJSON(value.wcag_table);$("#" + ctabId).append(tableHtml);}});}jQuery("#" + chart_id).parent().find(".charts_tabs").tabs();});} function createChart() {}function getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min; }function genrateJsonTableMultiAxis(jsonData){let divClass = jsonData.show_table_class;let tableData = jsonData.table;// Create the table with the specified classlet html = "
" + header + " | ";});html += "
---|
" + cell + " | ";});html += "
";return html;}function generateTableFromJSON(jsonData) {if (!jsonData) {return "";}const wcagTable = jsonData;const heading = wcagTable.heading;const rows = wcagTable.rows;const divClass = wcagTable.div_class || "";let html = "
" + heading.date + " | ";html += "" + heading.value + " | ";if (heading.compare_value) {html += "" + heading.compare_value + " | ";}html += "
---|---|---|
" + row.date + " | ";html += "" + row.value + " | ";if (row.compare_value) {html += "" + row.compare_value + " | ";}html += "
";return html;}function parseChartData(value) {const labels = JSON.parse(value.data_label.slice(7));const data = JSON.parse(value.data);const compareLocationData = JSON.parse(value.compare_location_data);const symbol = value.symbol;const percent = value.percent;const datasets = [ {label: value.dataset_compare_location_label,data: data,borderWidth: value.chart_border_width,backgroundColor: value.chart_plain_bgcolor,borderColor: value.chart_plain_border_color,pointBackgroundColor: value.chart_plain_pointbgcolor,pointBorderColor: value.chart_tab_point_border_color,pointStyle: "rectRounded",pointRadius: value.chart_plain_point_radius,pointHitRadius: value.chart_plain_point_hit_radius,pointHoverRadius: value.chart_plain_point_hover_radius,pointHoverBorderWidth: value.chart_plain_point_hover_border_width,cubicInterpolationMode: "default",spanGaps: true, },]; if (value.compare_location_label) { datasets.push({label: value.compare_location_label,data: compareLocationData,borderWidth: value.chart_comparison_border_width,fill:value.chart_comparison_fill_flag,backgroundColor: value.chart_comparison_bgcolor,borderColor: value.chart_comparison_border_color,pointRadius: value.chart_comparison_point_radius,pointHitRadius: value.chart_comparison_point_hit_radius,pointHoverRadius: value.chart_comparison_point_hover_radius,pointHoverBorderWidth: value.chart_comparison_point_hover_border_width,cubicInterpolationMode: "default",spanGaps: true, });} const chartData = { labels: labels, datasets: datasets,};let abc;if (value.annotation) {try { abc = JSON.parse(value.annotation);} catch (error) {// alert("Error parsing annotation JSON:"+ value.annotation);} }if (value.annotation) {abc = JSON.parse(value.annotation);}if(value.yaxis_label_labelString!=null){var y_label = value.yaxis_label_labelString;}else{var y_label = "";}const chartOptions = { maintainAspectRatio: false, scales: {yAxes: [ {ticks: { autoSkip: true, autoSkipPadding: 90, reverse: false, callback: function (value, index, values) {return symbol + value + percent; },},scaleLabel: { display: true, fontSize: 14, labelString: y_label,}, },],xAxes: [ {ticks: { autoSkip: true, autoSkipPadding: 5,}, },], }, legend: {display: value.xAxes_legend_display === "true",labels: { fontSize: 14,}, }, tooltips: {enabled: true,mode: "single",callbacks: { label: function (tooltipItems, data) {return symbol + tooltipItems.yLabel + percent; },}, }, // Add any other chart options here};if (abc && abc.annotation) {chartOptions.annotation = abc.annotation; }var options = { type: "line", data: chartData, options: chartOptions,};return options; } function fixInvalidCommas(dataString) {return dataString.replace(/,,/g, ",null,"); } function findInvalidCharacter(jsonString) {let position = -1;try { JSON.parse(jsonString);} catch (error) { const match = error.message.match(/position (\d+)/); if (match) {position = parseInt(match[1], 10); }}return position; }function isElementVisibleAPI(el) {const rect = el.getBoundingClientRect();const windowHeight = window.innerHeight || document.documentElement.clientHeight;const windowWidth = window.innerWidth || document.documentElement.clientWidth;return (rect.top < windowHeight &&rect.bottom > 0 &&rect.left < windowWidth &&rect.right > 0);}});